Bagaimana saya bisa menjalankan daftar proses menggunakan Python di Linux?
Jawaban:
IMO melihat /procfilesystem tidak semanis meretas output teks 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- ia melakukan semua ini melalui antarmuka Pythonic yang bagus dan portabel jika Anda ingin menjalankannya di server non-Linux.
Anda dapat menggunakan psutil sebagai solusi independen platform!
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]
Anda dapat menggunakan perpustakaan pihak ketiga, seperti PSI :
PSI adalah paket Python yang menyediakan akses waktu nyata ke proses dan informasi sistem lain-lain seperti arsitektur, waktu boot, dan sistem file. Ini memiliki API pythonic yang konsisten di semua platform yang didukung tetapi juga mengekspos detail spesifik platform jika diinginkan.
Cara yang disetujui untuk membuat dan menggunakan proses anak adalah melalui modul subproses.
import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl
Perintah dipecah menjadi daftar argumen python sehingga tidak perlu dijalankan di shell (Secara default subprocess.Popen tidak menggunakan jenis lingkungan shell apa pun itu hanya mengeksekusinya). Karena itu kami tidak bisa menyediakan 'ps -U 0' ke Popen.
Saya akan menggunakan modul subproses untuk menjalankan perintah psdengan opsi yang sesuai. Dengan menambahkan opsi, Anda dapat mengubah proses mana yang Anda lihat. Banyak contoh subproses di SO. Pertanyaan ini menjawab bagaimana mengurai output psmisalnya :)
Anda dapat, sebagai salah satu contoh jawaban yang ditunjukkan juga menggunakan modul PSI untuk mengakses informasi sistem (seperti tabel proses dalam contoh ini ).
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
print(lst[i])