Danh sách xử lý trên Linux qua Python


Câu trả lời:


128

IMO xem xét /prochệ 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

10
Bạn sẽ phải bao quanh cuộc gọi read () bằng một khối try / exception vì pid được trả về từ việc đọc os.listdir ('/ proc') có thể không còn tồn tại vào thời điểm bạn đọc cmdline.
Yanamon

4
Cuối cùng! Thẩm định! Bây giờ tôi có thể dừng lại! :-)
bobince

5
-1 cho / proc từ trước đến nay không di động và có giao diện tốt hơn có sẵn
Good Person

2
Chú ý: dòng lệnh được kết thúc bởi 0x00. Khoảng trắng cũng được thay thế bằng ký tự tương tự.
Federico

2
Chỉ cần sử dụng 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.
RichVel

83

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]

2
chỉ cần xem qua tài liệu .
enthus1 cuối

Cảm ơn đã đưa ra vấn đề này! Gói gọn gàng.
codekoala

5
Nó không phải hoàn toàn nền tảng độc lập - trên OSX bạn có thể chạy vào các lỗi AccessDenied: groups.google.com/forum/?fromgroups=#!topic/psutil/bsjpawhiWms
amos

@amos kinda có lý - trước tiên bạn muốn có các đặc quyền trước khi tiếp cận thông tin về các quy trình. Cảm ơn cho gợi ý.
JSmyth

Để khuếch đại điểm OSX - bạn cần có đặc quyền root trên OSX để nhận thông tin quy trình, không giống như Linux.
RichVel

8

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.


2
PSI được cập nhật lần cuối vào năm 2009, trong khi psutil được cập nhật vào tháng này (tháng 11 năm 2015) - có vẻ như psutil là một lựa chọn tốt hơn.
RichVel

7

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.


0

Tôi sẽ sử dụng mô-đun quy trình con để thực hiện lệnh psvớ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 ).


-2
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
    print(lst[i])
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.