2010-09-16 8 views
45

Przeczytałem to gdzieś jakiś czas temu, ale nie mogę tego znaleźć. Próbuję znaleźć polecenie, które wykona polecenia w terminalu, a następnie wyprowadzić wynik.Python Script wykonuje polecenia w Terminalu

Na przykład: skrypt będzie:

command 'ls -l' 

Będzie się Wynikiem działania tego polecenia w terminalu

Odpowiedz

89

Istnieje kilka sposobów, aby to zrobić:

Prostym sposobem jest użycie modułu SO:

import os 
os.system("ls -l") 

Bardziej skomplikowane rzeczy można osiągnąć za pomocą modułu subprocess: dla przykład:

import subprocess 
test = subprocess.Popen(["ping","-W","2","-c", "1", "192.168.1.70"], stdout=subprocess.PIPE) 
output = test.communicate()[0] 
+16

Nie chcę cię zgodzić, ale. Powinieneś używać podprocesu do wszystkiego. To bezpieczniejsze. subprocess.call() dostarczy ci ładny interfejs, aby zastąpić prosty formularz połączenia. –

+0

Dzięki za tę odpowiedź kolega. Będzie używać Pythona do mojej pierwszej aplikacji na pulpicie Ubuntu, to naprawdę mi pomoże. – LinuxBill

+0

Jak uzyskać kompletną odpowiedź polecenia, 'os.system (" nslookup gmail.com ")' zwraca tylko ostatnią linię '0', ale chcę uzyskać pełną odpowiedź. –

1

Powinieneś także zbadać commands.getstatusoutput

Zwraca krotka długości 2 .. Pierwszy oznacza liczbę powrotu (0 - w przypadku gdy polecenia są skuteczne) drugie, cała moc, jak to zostanie pokazane w terminalu.

LS

import commands 
    s=commands.getstatusoutput('ls') 
    print s 
    >> (0, 'file_1\nfile_2\nfile_3') 
    s[1].split("\n") 
    >> ['file_1', 'file_2', 'file_3'] 
-5

w GUI stacjonarnym, (niektórzy z was nie może go używać) można leafpad skrót na pulpicie i ma w nim polecenie, aby otworzyć plik deignated. Jeśli skopiujesz i wkleisz go do swojego interpretera python, powinien działać. (Nie jestem pewna, że ​​to zadziała, ale czemu by nie spróbować!) Przepraszamy za wszystkie błędy ortograficzne ... mam tylko 11. Ta informacja NIE składa się! to tylko jestem leniwy podczas wymyślania imienia! pamiętajcie, jestem tylko 11!

+0

lol whattttttttt – mikebertiean

+0

lmfao co to jest – Gianlucca

8

wolę wykorzystania modułu subprocess:

from subprocess import call 
call(["ls", "-l"]) 

Powód jest to, że jeśli chcesz przekazać jakąś zmienną w skrypcie daje to bardzo łatwy sposób na przykład przyjąć następującą część kodu

abc = a.c 
call(["vim", abc]) 
0
import os 
os.system("echo 'hello world'") 

To powinno działać. Nie wiem jak wydrukować dane wyjściowe do powłoki Pythona.

Powiązane problemy