[python-brasil] Monitorar processos do sistema operacional

1,643 views
Skip to first unread message

Paulo Patto

unread,
Sep 30, 2011, 2:31:33 PM9/30/11
to Lista Python Brasil
 

Olá integrantes da lista.

Bem estou trabalhando em um projeto de pesquisa cientifica e estava usando
python como "linguagem de cola" ou seja usava python no projeto para montar
ambiente, usava como script de automação, porém em dado momento, me
perguntei '*será que o python não poderia ser a linguagem base?*' Assim
resolvi usar python além de linguagem de auxilio, porém agora estou com
algumas dúvidas de como fazer certas tarefas em python. Gostaria de saber se
é possível:

*~> Monitorar Processos no sistema operacional:*
Gostaria de poder monitorar um processo no sistema operacional onde o
script/aplicativo estiver rodando, supondo que eu rode um processo
MyProcess, quero obter seu uso de CPU, Memória, PID e usuário, a plataforma
base para meus scripts é linux e unix-like, porém por ventura pode ser que
um usuário Windows venha a utilizar, por isso se possível a solução tem que
ser portável ou que seja possível via implementação nativa para as duas
plataformas.

*~> Monitorar I/O de disco:*
Como eu conseguira monitorar o I/O de um HD com python? Quero saber isso
para por ventura saber benchmarkings de leitura e escrita em disco.

*~> Manipulação de links para arquivos:*
Existe a possibilidade tanto em linux/unix-like e windows de através do
python eu criar links (comando "ln -s ...")?

*~> Manipular grandes arquivos XML:*
Tenho grandes arquivos de xml com registros de dados (ou seja banco de dados
em xml), a api minidom e sax do python são as mais recomendadas para
trabalhar com arquivos na casa do MEGA BYTES e GIGA BYTES? Não quero todo o
arquivo em memória, somente a parte de registros que me interessar.

Agradeço desde já pelas possíveis respostas.

--

*@paulopatto*
RT *#**Confúcio: **"Dê a quem você ama: asas para voar, raízes para voltar e
motivos para ficar."*
*http://paulopatto.me/*

[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
.

__,_._,___

Eduardo Oliva

unread,
Sep 30, 2011, 6:05:26 PM9/30/11
to python-brasil


On Sep 30, 3:31 pm, Paulo Patto <paulopa...@gmail.com> wrote:
> Olá integrantes da lista.
>
> Bem estou trabalhando em um projeto de pesquisa cientifica e estava usando
> python como "linguagem de cola" ou seja usava python no projeto para montar
> ambiente, usava como script de automação, porém em dado momento, me
> perguntei '*será que o python não poderia ser a linguagem base?*' Assim
> resolvi usar python além de linguagem de auxilio, porém agora estou com
> algumas dúvidas de como fazer certas tarefas em python. Gostaria de saber se
> é possível:
>
> *~> Monitorar Processos no sistema operacional:*
> Gostaria de poder monitorar um processo no sistema operacional onde o
> script/aplicativo estiver rodando, supondo que eu rode um processo
> MyProcess, quero obter seu uso de CPU, Memória, PID e usuário, a plataforma
> base para meus scripts é linux e unix-like, porém por ventura pode ser que
> um usuário Windows venha a utilizar, por isso se possível a solução tem que
> ser portável ou que seja possível via implementação nativa para as duas
> plataformas.

Bom, pra isso vc vai precisar interagir um pouco mais com o sistema
operacional e entender o que rola no kernel e tal.
Se você olhar em /proc vai ver vários diretórios, cada um deles
corresponde a um processo rodando no sistema, e entenda por "rodando",
que o processo está lá on scheduler, e não necessariamente está sendo
executado no processador [ver sobre estados de processo].

Dentro desse diretório vc tem os dados que o processo pode ter.
Recomendo vc dar uma lida em algum tutorial de kernel/processos pra
entender bem o que é cada coisa lá.


>
> *~> Monitorar I/O de disco:*
> Como eu conseguira monitorar o I/O de um HD com python? Quero saber isso
> para por ventura saber benchmarkings de leitura e escrita em disco.

Então, vc quer monitorar em qual escopo, no escopo do processo, ou em
todos os processos rodando no sistema operacional?

>
> *~> Manipulação de links para arquivos:*
> Existe a possibilidade tanto em linux/unix-like e windows de através do
> python eu criar links (comando "ln -s ...")?
>

Tem sim, tranquilamente.

Veja : http://docs.python.org/release/2.6.7/library/os.html?highlight=symlink

Tem uma função chamada os.symlink


> *~> Manipular grandes arquivos XML:*
> Tenho grandes arquivos de xml com registros de dados (ou seja banco de dados
> em xml), a api minidom e sax do python são as mais recomendadas para
> trabalhar com arquivos na casa do MEGA BYTES e GIGA BYTES? Não quero todo o
> arquivo em memória, somente a parte de registros que me interessar.
>

Essa daí eu jah num sei mto bem ;)

Paulo Patto

unread,
Sep 30, 2011, 6:26:30 PM9/30/11
to python...@googlegroups.com
Olá Eduardo, boa noite. 

Quanto a essa parte de monitorar processos, bem no meu caso como acredito que eu vá dar o start no processo via talvez a subprocess possa me ajudar eu já tinha em mente usar algo como um "ps -aux", mas se tivesse algo que me permitisse obter as informações como o gerenciador de processos do windows e do gnome consegue seria uma boa, mas acho meio difícil o python conseguir isso pois ele não teria tamanha iteração com o sistema operacional.

Para o xml, bem eu tava relendo uns históricos aqui da lista[1][2] e em ruby eu já sabia que usar a libxml era mais eficiente, sei que a SAX é mais eficiente que a eTree e a DOM por testes feitos aqui na minha máquina, a sax não estoura a memória, acredito eu por que ela não salva a arvore dom em memória. Vamos ver ai se eu testoa  lxml[3] esse final de semana. 

Sobre o hd é no escopo do processo.

No mais continuo pesquisando 



[3] lxml

Eduardo Oliva

unread,
Oct 1, 2011, 6:33:28 AM10/1/11
to python-brasil
Bom, quanto ao fato de o python conseguir ou não algo por falta de
interação boa com o sistema operacional, podes ficar tranquilo, o
python consegue fazer qualquer coisa, e digo qualquer coisa mesmo, que
interaja com o sistema operacional, ou que já tenha bibliotecas em C
(veja ctypes).

No windows eu não tenho muita experiência, fiz poucas coisas em Python/
Win, por isso não posso te afirmar, agora quanto ao linux, fique
tranquilo, dá pra fazer, soh que pelo jeito vc quer algo mais "alto
nível" do que buscar informações no kernel, correto?

Se você vai abrir com o subprocess, tudo fica mais fácil, vc consegue
manter referencia do que tá acontecendo. É relativamente fácil.

Cara, quanto ao monitoramento de HD por processo, eu sinceramente não
conheço outro jeito de fazer a não ser usando o Ptrace (veja python-
ptrace) pra hookar a syscall write e read do processo. Ou seja, vc
meio que faria um live debugger com o ptrace, assim daria pra manter
referência de tudo que tá acontecendo...mas veja, isso é bem "baixo
nível". Creio que deva ter alguma outra solução por aí.

Eu já precisei criar debuggers em python pra linux e usei essa forma,
por isso estou lhe falando ;)

Boa sorte com as pesquisas aí, é bastante matéria :)

[]s

Eduardo Oliva

On Sep 30, 7:26 pm, Paulo Patto <paulopa...@gmail.com> wrote:
> Olá Eduardo, boa noite.
>
> Quanto a essa parte de monitorar processos, bem no meu caso
> como acredito que eu vá dar o start no processo via talvez a subprocess<http://docs.python.org/library/subprocess.html>possa me ajudar eu já tinha em mente usar algo como um "ps -aux", mas se
> tivesse algo que me permitisse obter as informações como o gerenciador de
> processos do windows e do gnome consegue seria uma boa, mas acho
> meio difícil o python conseguir isso pois ele não teria tamanha iteração com
> o sistema operacional.
>
> Para o xml, bem eu tava relendo uns históricos aqui da lista[1][2] e em ruby
> eu já sabia que usar a libxml era mais eficiente, sei que a SAX é mais
> eficiente que a eTree e a DOM por testes feitos aqui na minha máquina, a sax
> não estoura a memória, acredito eu por que ela não salva a arvore dom em
> memória. Vamos ver ai se eu testoa  lxml <https://github.com/lxml/lxml>[3]
> esse final de semana.
>
> Sobre o hd é no escopo do processo.
>
> No mais continuo pesquisando
>
> [1] Busca em arquivo XML<https://groups.google.com/d/topic/python-brasil/2CE35DhRXFE/discussion>
> [2] Parse em XML com C<https://groups.google.com/d/topic/python-brasil/VJvgdmInoCs/discussion>
> [3] lxml <http://lxml.de/index.html>

Carlos Ribeiro

unread,
Oct 1, 2011, 8:02:27 AM10/1/11
to python...@googlegroups.com
On Sep 30, 3:31 pm, Paulo Patto <paulopa...@gmail.com> wrote:
> *~> Monitorar Processos no sistema operacional:*
> *~> Monitorar I/O de disco:*
> *~> Manipulação de links para arquivos:*

Tudo que você fizer no sistema operacional, pode fazer em Python. Existem várias opções:

1) interfaces nativas (módulos os, os.path, etc.);
2) comandos do sistema que você pode disparar e "parsear" os resultados (vmstat ou iostat, que mostram memória e IO de disco);
3) inspeção de valores do sistema (/proc no Linux);
4) acesso via agente SNMP (usando um agente SNMP nativo da plataforma e um módulo de SNMP em Python para consulta);
5) finalmente, chamadas diretas do kernel, usando ctypes. O difícil não é chamar, é descobrir qual chamada e quais parâmetros usar, porque um erro às vezes pode ter consequências meio drásticas.

Existem livros sobre "System Administration" usando Python que falam desse tipo de coisa. É mais comum em Linux mas pode ser que você ache algo voltado para Windows também. Peguei algumas dicas via Google:

Python for system administrators
http://www.ibm.com/developerworks/aix/library/au-python/

Python for Unix and Linux System Administration
Efficient Problem Solving with Python
http://shop.oreilly.com/product/9780596515829.do

Python for Linux System Administration
https://sites.google.com/site/pythonforlinux/

Pro Python System Administration
http://www.apress.com/9781430226055

Python WMI Module
http://tgolden.sc.sabren.com/python/wmi/index.html

Python WMI Cookbook
http://tgolden.sc.sabren.com/python/wmi/cookbook.html

Se alguém tiver tempo, podia colocar isso no Wiki da Python Brasil ;-)

--
Carlos Ribeiro
Consultoria em Projetos
twitter: http://twitter.com/carribeiro
blog: http://rascunhosrotos.blogspot.com
mail: carri...@gmail.com

mauro.baraldi

unread,
Oct 6, 2011, 9:31:55 PM10/6/11
to python...@yahoogrupos.com.br
 

Paulo, é sempre muito legal saber das histórias de novos adeptos à linguagem. Bem vamos às dúvidas...

Manipulação de processos: A melhor opção é a biblioteca psutil [1]. Já esta pronto e tem a maioria das funcionalidaes que vc precisa para trabalhar com processos. Ela é cross-plataform, mas se tratando de MS Windows, me bate uma curiosidade... =D

I/O de disco: Tem o iotop [2] que é feito em Python. Eu sei que não foi essa a sua pergunta, mas a partir da aplicação instalada no siste é possível acessar suas bibliotecas, eu testei aqui (no Ubuntu 10.04/Python 2.7/iotop 0.4.1 (ubuntu repo version) e consegui importar a biblioteca. O próximo passo seria ler o código e trabalhar em cima dele. Essa realmente foi baseada essenciamente em sistemas POSIX.

Symlinks: Se vc quiser criar links, os.symlink(src, dst), simples assim. Para saber se o arquivo é um link os.path.islink(path). Para apagar, os.remove(path). Mais alguma coisa que queira fazer com links ? =P Ah, "Availability: Unix."

XML: Eu recomendo usar a biblioteca lxml [3]. Aqui [4] rolou uma discussão sobre esse assunto (Parsing large XML file with Python)

[1] http://code.google.com/p/psutil/
[2] http://freshmeat.net/projects/iotop
[3] http;//lxml.de
[4] http://stackoverflow.com/questions/324214/what-is-the-fastest-way-to-parse-large-xml-docs-in-python

[ ]'s
Mauro Baraldi

--- Em python...@yahoogrupos.com.br, Paulo Patto <paulopatto@...> escreveu

__._,_.___
.

__,_._,___

Paulo Patto

unread,
Oct 7, 2011, 12:34:40 PM10/7/11
to python...@yahoogrupos.com.br
 

2011/10/6 mauro.baraldi <no_r...@yahoogrupos.com.br>



> Paulo, é sempre muito legal saber das histórias de novos adeptos à
> linguagem. Bem vamos às dúvidas...
> Manipulação de processos: A melhor opção é a biblioteca psutil [1]. Já esta
> pronto e tem a maioria das funcionalidaes que vc precisa para trabalhar com
> processos. Ela é cross-plataform, mas se tratando de MS Windows, me bate uma
> curiosidade... =D
> I/O de disco: Tem o iotop [2] que é feito em Python. Eu sei que não foi
> essa a sua pergunta, mas a partir da aplicação instalada no siste é possível
> acessar suas bibliotecas, eu testei aqui (no Ubuntu 10.04/Python 2.7/iotop
> 0.4.1 (ubuntu repo version) e consegui importar a biblioteca. O próximo
> passo seria ler o código e trabalhar em cima dele. Essa realmente foi
> baseada essenciamente em sistemas POSIX.
> Symlinks: Se vc quiser criar links, os.symlink(src, dst), simples assim.
> Para saber se o arquivo é um link os.path.islink(path). Para apagar,
> os.remove(path). Mais alguma coisa que queira fazer com links ? =P Ah,
> "Availability: Unix."
> XML: Eu recomendo usar a biblioteca lxml [3]. Aqui [4] rolou uma discussão
> sobre esse assunto (Parsing large XML file with Python)
> [1] http://code.google.com/p/psutil/
> [2] http://freshmeat.net/projects/iotop
> [3] http;//lxml.de
> [4]
> http://stackoverflow.com/questions/324214/what-is-the-fastest-way-to-parse-large-xml-docs-in-python
>

> Primeiramente gostaria de agradecer ao Carlos e Eduardo pelas respostas, já
devia ter respondido a dias, mas não estive muito bem de saúde.

Mauro vou analizar suas sugestões, eu estava quase implementando códigos
nativos em C e fazendo um Wrapper em Python, mas vou analizar suas
sugestões. Muito obrigado.



--

*@paulopatto*
RT *#**Confúcio: **"Dê a quem você ama: asas para voar, raízes para voltar e
motivos para ficar."*
*http://paulopatto.me/*

*


*

[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
.

__,_._,___

@maltzsama

unread,
Oct 7, 2011, 6:38:12 PM10/7/11
to python...@yahoogrupos.com.br

Paulo Patto

unread,
Oct 7, 2011, 7:28:58 PM10/7/11
to python...@yahoogrupos.com.br
 

Paulo Patto;
enviado de um celular Android, desconsiderar erros.
Em 07/10/2011 19:38, "@maltzsama" <cau...@gmail.com> escreveu:

> **

__._,_.___
.

__,_._,___

Paulo Patto

unread,
Oct 7, 2011, 7:32:53 PM10/7/11
to python...@yahoogrupos.com.br
 

Mas a psutil funcionou bem no windows e linux, no window tive alguns
prblemas para compilar (instalação via pip), pois dava erro com o mingw e
msvc. Poré tem a solução pre compilada pelo desenvolvedor... mas foi de boa
o uso. Vou ver essa outra wmi, que eu já havia visto, vou testar, mas acho
que vou usar psutil para manter uma aior homogeniedde e simplicidade do
código.



Paulo Patto;
enviado de um celular Android, desconsiderar erros.
Em 07/10/2011 19:38, "@maltzsama" <cau...@gmail.com> escreveu:

> **
>
>

__._,_.___
.

__,_._,___

Wellington Almeida Silva

unread,
Oct 29, 2014, 8:32:18 PM10/29/14
to python...@googlegroups.com, python...@yahoogrupos.com.br
Boa noite, alguém ainda acessaria esse topico? rs
criei um algoritmo usando psutil para monitorar um processo especifico, esse modulo da suporte a criação de arquivos, conexões, mas não a criação de registros, não faço ideia de como monitorar essa parte usando a instancia desse processo no meu script. alguém tem uma dica de implementação?

Alejandro Mesias

unread,
Nov 2, 2014, 8:25:38 PM11/2/14
to python-brasil, python...@yahoogrupos.com.br
Wellington você se refere a criar registros do windows (que o regedit faz) ?

se for isso você tem o winreg que vem na lib padrão do python:

Isso não tem relação com a finalidade do psutil, até onde eu sei.

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
======================================
Alejandro Mesias André Nebra Perez
Java/Python/Js/Something else Developer
Twitter: @meszias
Linux User #442506
Campinas - SP - Brasil - South America
======================================
Reply all
Reply to author
Forward
0 new messages