Odpowiedzi:
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]
os.system("nslookup gmail.com")zwraca tylko ostatnią linię 0, ale chcę uzyskać pełną odpowiedź.
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])
call(["eog", "1breeproposal.png", "-f"])
Właściwie każde pytanie dotyczące podprocesu będzie dobrą lekturą
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']
import os
os.system("echo 'hello world'")
To powinno działać. Nie wiem, jak wydrukować dane wyjściowe w powłoce Pythona.
Funkcja os.popen () jest dość prosta w użyciu, ale została wycofana od czasu Pythona 2.6. Powinieneś użyć podprocesu modułu .
Przeczytaj tutaj: wczytywanie os.popen (polecenie) do łańcucha
W notebooku jupyter możesz użyć magicznej funkcji !
!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable
Aby wykonać to jako .pyskrypt, musisz użyćipython
files = get_ipython().getoutput('ls -a /data/dir/')
wykonaj skrypt
$ ipython my_script.py
Możesz zaimportować moduł „os” i używać go w następujący sposób:
import os
os.system('#DesiredAction')
dla python3 użyj podprocesu
import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)