Python ile terminale komut gönderme

merhaba. ubuntu terminale subprocess ve os ile ls, cd gibi komutlar gönderdiğimde çalışıyor ancak başka bir programın komutlarını tanımıyor.

örneğin terminale “sh_setup -yr 2000” dediğimde çalışıyor ama aynı komutu scriptten gönderince “bash: sh_setup command not found” uyarısı alıyorum.

Uğraştım ama çözemedim. Yardım edebilirseniz çok sevinirim.

Nasıl yolladığınızı bir kodla gösterir misiniz? Sıkıntı belki oradadır.
Olması gereken şu:

os.system(“sh_setup -yr 2000”)

Cevap için teşekkür ederim. Aşağıdaki şekillerde denedim ama olmadı maalesef. sh_setup’un uzantısını da yazdım ama yine de olmadı.

os.system(“sh_setup -yr 2000”)
os.popen(“gnome-terminal -e ‘bash -c “sh_setup -yr 2000; exec bash”’”)

Dosyanın uzantısı ne? .py ise zaten başına python eklemeniz gerekiyor.

Komuttaki tırnak işaretlerinde bir hata var.
Bir de aşağıdakini deneyin.

os.popen("""gnome-terminal -e 'bash -c "sh_setup -yr 2000; exec bash"'""")

Yanlış yazmışım kusura bakmayın. Uzantısı yerine dosya yolu yazacaktım. Yani sh_setup’ı dosya yolu ile ekledim ancak o zaman da sh_setup’ın içindeki alt komutları tanımıyor, aynı hatayı veriyor.

Sanırım çözüm olarak bu komutların ait olduğu programı tanımlamak ya da path’e eklemek vs. gerekiyor ama hiçbir fikrim yok maalsef.

Cevap için teşekkür ederim. Bu şekilde de aynı hatayı aldım maalesef.

Bu komut ne işe yarıyor?

GPS verilerinin değerlendirilmesi için kullanılan bir gmt yazılımı var, o yazılımın komutlarından biri. terminalde manuel girince çalışıyor.

Bu komutun çalışabilmesi için o yazılımın yüklü olması lazım herhalde?

Bir de şunu merak ediyorum. Normalde aşağıdaki komutta “sh_setup -yr 2000” yerine herhangi bir komut yazsam çalışmalı mı? (sadece terminalin kendi komutları çalışıyor.) Eğer öyleyse sorunu başka yerde aramalıyım.

os.popen(""“gnome-terminal -e ‘bash -c “sh_setup -yr 2000; exec bash”’”"")

Evet. ama terminalin kendi komutu dışında başka herhangi bir programın komutunun çalışması da yeterli benim için, o mantıkla devam edebilirim ama nedense çalışmıyor. :slight_smile: sanal makine kullanıyor olmamın bir etkisi yoktur diye düşünüyorum ama?

Mesela son paylaştığınız kodlardaki tırnak işaretlerinde de yine hata var. Kavisli tırnak kullanıyorsunuz. Halbuki düz tırnak kullanmalısınız.
Mesela aşağıdaki kodların çalışması lazım:

os.popen("""gnome-terminal -e 'bash -c "ls -l; exec bash"'""")

Sizin yazdığınız komuttaki tırnak işaretleri ise aşağıdaki gibi. Ve bu aşağıdaki komut çalışmaz.

os.popen(""“gnome-terminal -e ‘bash -c “ls -l; exec bash”’”"")
SyntaxError: invalid character in identifier

Tırnak sorunu için sanırım kopyala yapıştır sorunundan dolayı kavisli tırnak görünüyor normalde tamamı düz tırnak. Ek olarak;

os.popen(""“gnome-terminal -e ‘bash -c “ls -l; exec bash”’”"")

Bu komut çalışıyor. “ls -l” kısmına terminal komutları yazdığımda da çalışıyor. Ama nedense başka bir programın komutları çalışmıyor sadece. Yabancı forumlarda baktım ama çözüm bulamadım. Eğer bulursak tatlı göndereceğim size. :slight_smile: Uğraşınız için teşekkürler.

Çok ayrıntılı olmamasına rağmen paylaştığınız komutları internette arattım ancak konuya yabancıyım, ne yapacağımı bilemiyorum.
Arama sonuçları

Mesela bu arama sonuçlarında çıkan ilk sayfada şöyle bir kısım var.

Bu arada tatlı için de teşekkür ederim. :slight_smile: Göndermiş kadar oldunuz.

sh_setup -yr [ -update <links/files/all> -apr -series -localeop -newfmt_stinfo -newfmt_lfile ]

Yukarıdaki komutu ve nicelerini çalıştıracağım ama daha ilk komutta takıldım.

Neyse araştırmaya devam edeyim. Uğraşınız için tekrar teşekkürler. Mesajla bir adres ve bir tatlı ismi gönderin, Pazartesi masanızda. :slight_smile:

1 Beğeni

Sıcak yaklaşımınız için çok teşekkür ederim, ama zahmet etmeyin lütfen. Yemiş kadar oldum emin olun. :slight_smile: Bu arada umarım sorununuzu en kısa zamanda çözersiniz.

1 Beğeni

Sizde bu komut ne cikti veriyor ki acaba?

import os
print(os.environ.get("sh_setup"))

Normalde butun komutların os system de calısması lazım ornek asagida:

Ben termuxta denedim bunu,ama linuxda da deneyip bu postumu guncellerim.Kolay gelsin.
Muhtemelen yol falan belirtmeniz lazımdır(ki zaten denediniz ama),terminal cıktısı verebilir misiniz?
Belki cozum degil,ama bir proje yapıyorsanız bu belirttiginiz kodları bir sh dosyası kullanarak script icinden
os.startfile(“senin_sh_dosyan.sh”)
diyerek calıstırabilirsiniz.
Kolay gelsin.

Edit:

Linux mintde de denedim:

Ekran%20G%C3%B6r%C3%BCnt%C3%BCs%C3%BC%20-%202018-05-13%2008-23-02

Öncelikle cevap için teşekkürler. os.environ.get(“sh_setup”) çıktısı aşağıda.

aku@aku-VirtualBox:~$ os.environ.get(“sh_setup”)
bash: syntax error near unexpected token ‘“sh_setup”’

Ek olarak dosya yolu belirterek çalıştırdığımda verdiği çıktı da aşağıda.

Girdi:

os.system(“gnome-terminal -e ‘bash -c "cd /home/aku/mnss/2016/ && /home/aku/gamit/com/sh_setup -yr 2016; exec bash"’”)

Çıktısı:

sh_year: Command not found.
EXECUTING sh_setup
~/mnss/2016/tables ~/mnss/2016
localeop: no
yr: Subscript out of range.

Son olarak şu şekilde bir link buldum. Tam olarak benim yapmak istediğimi yapmış. os.system ile çözmüş. Ama anlayamadım.

Sunu ve turevlerini de deneyebilir misiniz?

import posix
posix.system("sh_setup -yr 2000")

Buyuk ihtimal olmayacak ama yine de yardımcı olmak istedim.

crontab la bir takım calısmalar yaptım sizin attığınız linki okuyunca.Ama su anlık basarısız oldum.Yine de arastırmadayım.

1 Beğeni