IMO patrzenie na /procsystem plików jest mniej nieprzyjemne niż włamywanie się do wyjścia tekstowego 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 terminatedcontinue
Będziesz musiał otoczyć wywołanie read () blokiem try / except, ponieważ pid zwrócony po przeczytaniu os.listdir ('/ proc') może już nie istnieć do czasu, gdy czytasz cmdline.
Yanamon,
4
W końcu! Uprawomocnienie! Teraz mogę przestać! :-)
bobince
5
-1 dla / proc, ponieważ nie jest przenośny i są dostępne lepsze interfejsy
Good Person
2
Uważaj: linia poleceń jest zakończona przez 0x00. Spacje są również zastępowane tym samym znakiem.
Federico
2
Po prostu używaj psutil- robi to wszystko za pośrednictwem przyjemnego interfejsu Pythonic i jest przenośny, jeśli kiedykolwiek zechcesz uruchomić na serwerze innym niż Linux.
RichVel
83
Możesz użyć psutil jako niezależnego od platformy rozwiązania!
@amos trochę ma sens - najpierw chciałbyś mieć uprawnienia, zanim sięgniesz po informacje o procesach. Dzięki za podpowiedź.
JSmyth
Aby wzmocnić punkt OSX - potrzebujesz uprawnień roota na OSX, aby uzyskać informacje o procesie, w przeciwieństwie do Linuksa.
RichVel
8
Możesz skorzystać z biblioteki innej firmy, takiej jak PSI :
PSI to pakiet Pythona zapewniający dostęp w czasie rzeczywistym do procesów i innych różnych informacji systemowych, takich jak architektura, czas rozruchu i systemy plików. Posiada pythonowy interfejs API, który jest spójny na wszystkich obsługiwanych platformach, ale także ujawnia szczegóły specyficzne dla platformy, jeśli jest to pożądane.
PSI został ostatnio zaktualizowany w 2009 roku, podczas gdy psutil został zaktualizowany w tym miesiącu (listopad 2015) - wydaje się, że psutil jest lepszym rozwiązaniem.
RichVel
7
Usankcjonowanym sposobem tworzenia i używania procesów potomnych jest użycie modułu podprocesu.
Polecenie jest podzielone na listę argumentów w języku Python, dzięki czemu nie trzeba go uruchamiać w powłoce (domyślnie podproces.Popen nie używa żadnego rodzaju środowiska powłoki, po prostu je wykonuje). Z tego powodu nie możemy po prostu dostarczyć Popenowi „ps -U 0”.
Chciałbym użyć subprocess moduł, aby wykonać polecenie psz odpowiednimi opcjami. Dodając opcje, możesz modyfikować widoczne procesy. Wiele przykładów podprocesu w SO. To pytanie odpowiada, jak przeanalizować dane wyjściowe psna przykład :)
Odpowiedzi:
IMO patrzenie na
/proc
system plików jest mniej nieprzyjemne niż włamywanie się do wyjścia tekstowegops
.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
źródło
psutil
- robi to wszystko za pośrednictwem przyjemnego interfejsu Pythonic i jest przenośny, jeśli kiedykolwiek zechcesz uruchomić na serwerze innym niż Linux.Możesz użyć psutil jako niezależnego od platformy rozwiązania!
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]
źródło
Możesz skorzystać z biblioteki innej firmy, takiej jak PSI :
źródło
Usankcjonowanym sposobem tworzenia i używania procesów potomnych jest użycie modułu podprocesu.
import subprocess pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0] print pl
Polecenie jest podzielone na listę argumentów w języku Python, dzięki czemu nie trzeba go uruchamiać w powłoce (domyślnie podproces.Popen nie używa żadnego rodzaju środowiska powłoki, po prostu je wykonuje). Z tego powodu nie możemy po prostu dostarczyć Popenowi „ps -U 0”.
źródło
Chciałbym użyć subprocess moduł, aby wykonać polecenie
ps
z odpowiednimi opcjami. Dodając opcje, możesz modyfikować widoczne procesy. Wiele przykładów podprocesu w SO. To pytanie odpowiada, jak przeanalizować dane wyjścioweps
na przykład :)Możesz, jak pokazano w jednej z przykładowych odpowiedzi, również użyć modułu PSI , aby uzyskać dostęp do informacji systemowych (takich jak tabela procesów w tym przykładzie ).
źródło
import os lst = os.popen('sudo netstat -tulpn').read() lst = lst.split('\n') for i in range(2,len(lst)): print(lst[i])
źródło