Daftar proses di Linux melalui Python


Jawaban:


128

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

10
Anda harus mengelilingi panggilan read () dengan blok coba / kecuali karena pid yang dikembalikan dari membaca os.listdir ('/ proc') mungkin sudah tidak ada lagi pada saat Anda membaca cmdline.
Yanamon

4
Akhirnya! Validasi! Sekarang saya bisa berhenti! :-)
sejak

5
-1 untuk / proc karena tidak portabel dan tersedia antarmuka yang lebih baik
Good Person

2
Hati-hati: baris perintah diakhiri oleh 0x00. Spasi putih juga diganti dengan karakter yang sama.
Federico

2
Cukup gunakan psutil- ia melakukan semua ini melalui antarmuka Pythonic yang bagus dan portabel jika Anda ingin menjalankannya di server non-Linux.
RichVel

83

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]

2
lihat saja dokumentasinya .
antusias 1

Terima kasih telah mengungkit hal ini! Paket rapi.
codekoala

5
Ini tidak sepenuhnya independen platform - di OSX Anda dapat mengalami kesalahan AccessDenied: groups.google.com/forum/?fromgroups=#!topic/psutil/bsjpawhiWms
amos

@amos agak masuk akal - Anda ingin memiliki hak istimewa terlebih dahulu sebelum menjangkau informasi tentang proses. Terima kasih atas petunjuknya.
JSmyth

Untuk memperkuat titik OSX - Anda memerlukan hak akses root pada OSX untuk mendapatkan info proses, tidak seperti Linux.
RichVel

8

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.


2
PSI terakhir diperbarui pada 2009, sedangkan psutil diperbarui bulan ini (Nov 2015) - sepertinya psutil adalah taruhan yang lebih baik.
RichVel

7

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.



-2
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
    print(lst[i])
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.