Câu trả lời:
Có nhiều hướng khác nhau để làm điều đó:
Một cách đơn giản là sử dụng mô-đun hệ điều hành:
import os
os.system("ls -l")
Những thứ phức tạp hơn có thể đạt được với mô-đun quy trình con: ví dụ:
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")
chỉ trả về dòng cuối cùng 0
, nhưng tôi muốn nhận được phản hồi đầy đủ.
Tôi thích sử dụng mô-đun quy trình con hơn:
from subprocess import call
call(["ls", "-l"])
Lý do là nếu bạn muốn chuyển một số biến trong tập lệnh, điều này mang lại một cách rất dễ dàng, chẳng hạn như lấy phần sau của mã
abc = a.c
call(["vim", abc])
call(["eog", "1breeproposal.png", "-f"])
Trên thực tế, bất kỳ câu hỏi nào về quy trình con sẽ được đọc tốt
Bạn cũng nên xem xét các lệnh.getstatusoutput
Điều này trả về một bộ giá trị có độ dài 2 .. Đầu tiên là số nguyên trả về (0 - khi các lệnh thành công) thứ hai là toàn bộ kết quả đầu ra như sẽ được hiển thị trong thiết bị đầu cuối.
Đối với 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'")
Điều này sẽ hoạt động. Tôi không biết làm thế nào để in đầu ra vào Python Shell.
Các os.popen () là khá đơn giản để sử dụng, nhưng nó đã bị phản đối từ Python 2.6. Bạn nên sử dụng mô-đun quy trình con để thay thế.
Đọc ở đây: đọc os.popen (lệnh) thành một chuỗi
Trong sổ tay jupyter, bạn có thể sử dụng chức năng ma thuật !
!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable
Để thực thi điều này như một .py
tập lệnh, bạn sẽ cần sử dụngipython
files = get_ipython().getoutput('ls -a /data/dir/')
thực thi kịch bản
$ ipython my_script.py
Bạn có thể nhập mô-đun 'os' và sử dụng nó như sau:
import os
os.system('#DesiredAction')
đối với quy trình con sử dụng python3
import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)