Python Script wykonuje polecenia w Terminalu


109

Czytał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.

Na przykład: skrypt będzie wyglądał następująco:

command 'ls -l'

Okaże wynik uruchomienia tego polecenia w terminalu

Odpowiedzi:


198

Można to zrobić na kilka sposobów:

Prostym sposobem jest użycie modułu os:

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

Bardziej złożone rzeczy można osiągnąć za pomocą modułu podprocesu: na przykład:

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

43
Nie chcę cię osłabiać, ale. Powinieneś używać podprocesu do wszystkiego. To jest o wiele bezpieczniejsze. subprocess.call () zapewni ładny interfejs, który zastąpi prosty formularz wywołania.
Jorge Vargas

Dzięki za tę odpowiedź kolego. Będę używać Pythona w mojej pierwszej aplikacji na pulpicie Ubuntu, to naprawdę mi pomoże.
LinuxBill,

1
Jak mogę uzyskać pełną odpowiedź na polecenie, os.system("nslookup gmail.com")zwraca tylko ostatnią linię 0, ale chcę uzyskać pełną odpowiedź.
Parthapratim Neog

3
@JorgeVargas Czy możesz mi pomóc zrozumieć, dlaczego podproces powinien być używany do wszystkiego? Dlaczego to jest bezpieczniejsze?
Soutzikevich

38

Preferuję użycie modułu subprocess:

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

Powodem jest to, że jeśli chcesz przekazać jakąś zmienną w skrypcie daje to bardzo łatwy sposób na przykład weź następną część kodu

abc = a.c
call(["vim", abc])

Udało mi się otworzyć zdjęcie z dodatkowymi parametramicall(["eog", "1breeproposal.png", "-f"])
Josh


4

Powinieneś także zajrzeć do commands.getstatusoutput

Zwraca krotkę o długości 2. Pierwsza to zwracana liczba całkowita (0 - gdy komendy się powiodły), druga to całe wyjście, jak zostanie pokazane na terminalu.

Dla 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']

2
import os
os.system("echo 'hello world'")

To powinno działać. Nie wiem, jak wydrukować dane wyjściowe w powłoce Pythona.



1

Jupyter

W notebooku jupyter możesz użyć magicznej funkcji !

!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable

ipython

Aby wykonać to jako .pyskrypt, musisz użyćipython

files = get_ipython().getoutput('ls -a /data/dir/')

wykonaj skrypt

$ ipython my_script.py

0

Możesz zaimportować moduł „os” i używać go w następujący sposób:

import os
os.system('#DesiredAction')

0

dla python3 użyj podprocesu

import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.