Làm cách nào tôi có thể lấy danh sách quy trình đang chạy bằng Python trên Linux?
Câu trả lời:
IMO xem xét /proc
hệ thống tập tin ít khó chịu hơn hack đầu ra văn bản của ps
.
import os
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
for pid in pids:
try:
print open(os.path.join('/proc', pid, 'cmdline'), 'rb').read().split('\0')
except IOError: # proc has already terminated
continue
psutil
- nó thực hiện tất cả những điều này thông qua giao diện Pythonic đẹp mắt và có thể di động nếu bạn muốn chạy trên một máy chủ không phải Linux.
Bạn có thể sử dụng psutil như một giải pháp độc lập với nền tảng!
import psutil
psutil.pids()
[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224,
268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355,
2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245,
4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358,
4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235,
5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]
Bạn có thể sử dụng thư viện của bên thứ ba, chẳng hạn như PSI :
PSI là một gói Python cung cấp quyền truy cập thời gian thực vào các quy trình và thông tin hệ thống linh tinh khác như kiến trúc, thời gian khởi động và hệ thống tệp. Nó có một API pythonic nhất quán trên tất cả các nền tảng được hỗ trợ nhưng cũng hiển thị các thông tin chi tiết về nền tảng cụ thể nếu muốn.
Cách được chấp nhận để tạo và sử dụng các quy trình con là thông qua mô-đun quy trình con.
import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl
Lệnh được chia thành một danh sách các đối số trong python để nó không cần chạy trong shell (Theo mặc định, quy trình con.Popen không sử dụng bất kỳ loại môi trường shell nào mà nó chỉ thực thi nó). Vì điều này, chúng tôi không thể chỉ cung cấp 'ps -U 0' cho Popen.
Tôi sẽ sử dụng mô-đun quy trình con để thực hiện lệnh ps
với các tùy chọn thích hợp. Bằng cách thêm các tùy chọn, bạn có thể sửa đổi các quy trình mà bạn thấy. Rất nhiều ví dụ về quy trình con trên SO. Câu hỏi này trả lời cách phân tích cú pháp đầu ra củaps
ví dụ :)
Bạn có thể, như một trong những ví dụ cho thấy câu trả lời cũng sử dụng PSI module để thông tin hệ thống truy cập (chẳng hạn như các bảng quá trình trong ví dụ này ).
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
print(lst[i])