Como checar se um script python está executando? (através de outro script)

839 views
Skip to first unread message

Arthur

unread,
May 12, 2017, 10:27:38 AM5/12/17
to Python Brasil
Olá, o ambiente é este:
Existem dois scripts(A e B) executando em 1 servidor (windows), o script B faz determinada ação e o script A (monitoramento) me notifica e permite controlar o script B; por exemplo, caso o script B feche, o A pode abri-lo.

O problema: 
Como o script principal é o B, ao ser aberto, ele abre o A (para me dar controle sobre ele) mas caso um erro aconteça, o B fechará e o A continuará aberto, o problema é que quando eu pedir para reabrir o B, o A irá abrir novamente, criando dois ao mesmo tempo.


Oque eu gostaria é de conseguir identificar quais scripts estão executando, assim, quando o B reabrir pela segunda ou mais vezes ele identificará que o A já está rodando e não reabrirá um segundo.

Alguém tem alguma ideia de como isto pode ser feito?

Obrigado desde já!

Marcelo Valle (BLOOMBERG/ LONDON)

unread,
May 12, 2017, 10:34:52 AM5/12/17
to python...@googlegroups.com
Se voce abrir o processo com o modulo subprocess, tem algum controle sobre a execucao do comando com metodos dessa classe. 
Se o processo eh aberto externamente, voce pode usar psutil para conseguir informacoes sobre os processos rodando na maquina. 

Exemplo com psutil:

```
import psutil


def get_pid(task):
for proc in psutil.process_iter():
try:
pinfo = proc.as_dict(attrs=['pid', 'cmdline'])
except psutil.NoSuchProcess:
pass
else:
# E. g. : pinfo = {
# 'cmdline': ['proceesB', "-r", "r_value0123"],
# 'pid': 12345
# }
if task in pinfo['cmdline']:
return pinfo['pid']
return None

```
--
--
------------------------------------
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.



<< ideas don't deserve respect >>

Vinicius Dantas

unread,
May 13, 2017, 3:38:13 PM5/13/17
to Python Brasil
Oi, Arthur!

Você está usando Linux? Uma prática comum nesse tipo de script é utilizar arquivos com o pid (process ID). Se você não tiver problemas lendo em inglês (não achei em português), dá uma lida rápida nesse link: https://unix.stackexchange.com/questions/12815/what-are-pid-and-lock-files-for
A ideia geral é criar um arquivo que contenha o id do processo e, se esse arquivo existir, considerar que o processo está rodando.

Arthur Albert

unread,
May 16, 2017, 7:05:02 AM5/16/17
to python...@googlegroups.com
Olá Marcelo e Vinicius, muito obrigado pelas dicas, acredito que o método do Marcelo me servirá bem, darei uma olhada na documentação do psutil, obrigado!

--
--
------------------------------------
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-brasil+unsubscribe@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/python-brasil/7d2txViY8nc/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages