IMO olhar para o /procsistema de arquivos é menos desagradável do que hackear a saída de texto dele 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')exceptIOError:# proc has already terminatedcontinue
Você terá que envolver a chamada read () com um bloco try / except, pois um pid retornado da leitura os.listdir ('/ proc') pode não existir mais no momento em que você ler o cmdline.
Yanamon
4
Finalmente! Validação! Agora posso parar! :-)
bobince
5
-1 para / proc, já que não é portátil e há interfaces melhores disponíveis
Boa pessoa,
2
Cuidado: a linha de comando termina em 0x00. Os espaços em branco também são substituídos pelo mesmo caractere.
Federico
2
Basta usar psutil- ele faz tudo isso por meio de uma bela interface Pythonic e é portátil se você quiser executar em um servidor não Linux.
RichVel
83
Você pode usar o psutil como uma solução independente de plataforma!
@amos meio que faz sentido - você gostaria de ter os privilégios em vigor primeiro, antes de obter informações sobre os processos. Obrigado pela dica.
JSmyth
Para ampliar o ponto OSX - você precisa de privilégios de root no OSX para obter informações do processo, ao contrário do Linux.
RichVel
8
Você pode usar uma biblioteca de terceiros, como PSI :
PSI é um pacote Python que fornece acesso em tempo real a processos e outras informações diversas do sistema, como arquitetura, tempo de inicialização e sistemas de arquivos. Ele tem uma API pythônica que é consistente em todas as plataformas suportadas, mas também expõe detalhes específicos da plataforma quando desejável.
O comando é dividido em uma lista de argumentos python para que não precise ser executado em um shell (por padrão, o subprocesso. Popen não usa nenhum tipo de ambiente de shell, apenas o executa). Por causa disso, não podemos simplesmente fornecer 'ps -U 0' para Popen.
Eu usaria o módulo de subprocesso para executar o comando pscom as opções apropriadas. Ao adicionar opções, você pode modificar os processos que vê. Muitos exemplos de subprocesso no SO. Esta pergunta responde como analisar a saída de, pspor exemplo :)
Respostas:
IMO olhar para o
/proc
sistema de arquivos é menos desagradável do que hackear a saída de texto deleps
.fonte
psutil
- ele faz tudo isso por meio de uma bela interface Pythonic e é portátil se você quiser executar em um servidor não Linux.Você pode usar o psutil como uma solução independente de plataforma!
fonte
Você pode usar uma biblioteca de terceiros, como PSI :
fonte
A maneira autorizada de criar e usar processos filhos é por meio do módulo de subprocesso.
O comando é dividido em uma lista de argumentos python para que não precise ser executado em um shell (por padrão, o subprocesso. Popen não usa nenhum tipo de ambiente de shell, apenas o executa). Por causa disso, não podemos simplesmente fornecer 'ps -U 0' para Popen.
fonte
Eu usaria o módulo de subprocesso para executar o comando
ps
com as opções apropriadas. Ao adicionar opções, você pode modificar os processos que vê. Muitos exemplos de subprocesso no SO. Esta pergunta responde como analisar a saída de,ps
por exemplo :)Você também pode, como uma das respostas de exemplo mostradas, usar o módulo PSI para acessar as informações do sistema (como a tabela de processos neste exemplo ).
fonte
fonte