[python-brasil] Ajuda, chamar um executável no código Python

2,953 views
Skip to first unread message

Neno Albernaz

unread,
Feb 14, 2011, 1:13:52 PM2/14/11
to python...@yahoogrupos.com.br
 

Oi Pessoal,
estou com um problema em um programa que estou desenvolvendo em
Python 2.6, utilizando WXPython.
No programa, tenho uma lista, o usuário tecla Enter em um item da
lista e o programa tem que executar um programa externo,
ele recebe o caminho completo do executável.

Não consegui achar em Python rotina que trate essa chamada, alguém
tem alguma dica?

Um abraço,
Neno.

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

__,_._,___

Leonel Freire

unread,
Feb 15, 2011, 8:11:43 AM2/15/11
to python...@yahoogrupos.com.br
Você pode usar o módulo "subprocess" do Python:
http://docs.python.org/library/subprocess.html

<http://docs.python.org/library/subprocess.html>Existem várias funcões (como
a "subproccess.call" - mais simplificada) que podem suprir sua necessidade.

Em 14 de fevereiro de 2011 15:13, Neno Albernaz <nen...@yahoo.com.br>escreveu:

>
>
> Oi Pessoal,
> estou com um problema em um programa que estou desenvolvendo em
> Python 2.6, utilizando WXPython.
> No programa, tenho uma lista, o usuário tecla Enter em um item da
> lista e o programa tem que executar um programa externo,
> ele recebe o caminho completo do executável.
>
> Não consegui achar em Python rotina que trate essa chamada, alguém
> tem alguma dica?
>
> Um abraço,
> Neno.
>
>

--
Atenciosamente,

Leonel Freire
Diretor de Tecnologia
--
Construir Sites
Fone e fax: +55 83 3252-1378
http://www.construirsites.com.br
Soluções completas em serviços de Internet


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

------------------------------------

Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Alexandre Machado

unread,
Feb 15, 2011, 10:27:10 AM2/15/11
to python...@yahoogrupos.com.br
 

Olá

Vc. pode chamar "os.system":

status = os.system('linha de comando com parâmetros separados por espaço')

O status será o código de retorno do programa chamado,e a chamada será feita
através do shell do sistema. A chamada system faz parte do subset posix que o
Windows implementa, ou seja, funciona também em Windows.

Alexandre



Em segunda-feira 14 fevereiro 2011, às 16:13:52, você escreveu:
> Oi Pessoal,
> estou com um problema em um programa que estou desenvolvendo em
> Python 2.6, utilizando WXPython.
> No programa, tenho uma lista, o usuário tecla Enter em um item da
> lista e o programa tem que executar um programa externo,
> ele recebe o caminho completo do executável.
>
> Não consegui achar em Python rotina que trate essa chamada, alguém
> tem alguma dica?
>
> Um abraço,
> Neno.

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

__._,_.___
.

__,_._,___

Adam Victor Nazareth Brandizzi

unread,
Feb 15, 2011, 11:26:05 AM2/15/11
to python...@yahoogrupos.com.br
 

2011/2/15 Alexandre Machado <axma...@gmail.com>:


> Olá
>
> Vc. pode chamar "os.system":

Não é uma boa, os.system é meio que depreciado. Melhor usar
subprocess, como comentou o Leonel:

>>> import subprocess
>>> subprocess.call(['/bin/echo', 'a', 'b'])
a b
0



> status = os.system('linha de comando com parâmetros separados por espaço')
>
> O status será o código de retorno do programa chamado,e a chamada será feita
> através do shell do sistema. A chamada system faz parte do subset posix que o
> Windows implementa, ou seja, funciona também em Windows.
>
> Alexandre
>

--
Adam Victor Nazareth Brandizzi
http://brandizzi.googlepages.com/

__._,_.___
.

__,_._,___

Alexandre Machado

unread,
Feb 15, 2011, 12:36:01 PM2/15/11
to python...@yahoogrupos.com.br
 

Olá, Adam

os.system não aparece como depreciado nem na documentação do 2.7 nem no
3.2rc3.

Concordo que o subprocess é muito mais poderoso, mas, se a intenção é só
executar um programa externo e esperar que ele termine, o os.system é mais
simples. Se você precisar controlar um pouco mais o processo externo, aí sim
vale a pena usar subprocess.

A diferença fundamental que eu vejo aqui é que o os.system vai passar a sua
linha de comando pelo shell do sistema operacional, permitindo, por exemplo,
expansão de variáveis de ambiente e de caracteres de controle do shell,
enquanto o subprocess.call vai executar o programa diretamente. Na prática,
isto significa, por exemplo, que se vc. chamar, em unix like, os.system('ls
*.a'), vai ter, em stdout, a lista dos arquivos que terminam em '.a', e se
chamar subprocess.call ('ls', '*.a'), vai ter a mensagem "arquivo não
encontrado, pois o ls vai procurar textualmente por um arquivo chamado "*.a".

Desta forma, acho mais prático para quem espera simplesmente executar uma
linha de comando passá-la pelo shell!

Alexandre



Em terça-feira 15 fevereiro 2011, às 14:26:05, você escreveu:
> 2011/2/15 Alexandre Machado <axma...@gmail.com>:
> > Olá
>
> > Vc. pode chamar "os.system":
> Não é uma boa, os.system é meio que depreciado. Melhor usar
>
> subprocess, como comentou o Leonel:
> >>> import subprocess
> >>> subprocess.call(['/bin/echo', 'a', 'b'])
>
> a b
> 0
>
> > status = os.system('linha de comando com parâmetros separados por
> > espaço')
> >
> > O status será o código de retorno do programa chamado,e a chamada será
> > feita através do shell do sistema. A chamada system faz parte do subset
> > posix que o Windows implementa, ou seja, funciona também em Windows.
> >
> > Alexandre

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

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

__,_._,___

Leonel Freire

unread,
Feb 15, 2011, 2:07:38 PM2/15/11
to python...@yahoogrupos.com.br
Concordo com o Adam, mas não sei se já está depreciado, porém, na
documentação oficial, na parte do módulo "subprocess" existe uma seção
"Replacing Older Functions with the subprocess Module" e lá está a
"os.system" (
http://docs.python.org/library/subprocess.html#subprocess-replacements).

Inclusive tem como expandir os argumentos pelo shell sim, bastando para isso
usar o argumento "shell=True":

subprocess.call("ls *", shell=True)

Em 15 de fevereiro de 2011 14:36, Alexandre Machado
<axma...@gmail.com>escreveu:

--
Atenciosamente,

Leonel Freire
Diretor de Tecnologia
--
Construir Sites
Fone e fax: +55 83 3252-1378
http://www.construirsites.com.br
Soluções completas em serviços de Internet

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

------------------------------------

Adam Victor Nazareth Brandizzi

unread,
Feb 15, 2011, 2:49:10 PM2/15/11
to python...@yahoogrupos.com.br
 

2011/2/15 Alexandre Machado <axma...@gmail.com>:


> Olá, Adam
>
> os.system não aparece como depreciado nem na documentação do 2.7 nem no
> 3.2rc3.
>
> Concordo que o subprocess é muito mais poderoso, mas, se a intenção é só
> executar um programa externo e esperar que ele termine, o os.system é mais
> simples. Se você precisar controlar um pouco mais o processo externo, aí sim
> vale a pena usar subprocess.
>
> A diferença fundamental que eu vejo aqui é que o os.system vai passar a sua
> linha de comando pelo shell do sistema operacional, permitindo, por exemplo,
> expansão de variáveis de ambiente e de caracteres de controle do shell,
> enquanto o subprocess.call vai executar o programa diretamente. Na prática,
> isto significa, por exemplo, que se vc. chamar, em unix like, os.system('ls
> *.a'), vai ter, em stdout, a lista dos arquivos que terminam em '.a', e se
> chamar subprocess.call ('ls', '*.a'), vai ter a mensagem "arquivo não
> encontrado, pois o ls vai procurar textualmente por um arquivo chamado "*.a".
>
> Desta forma, acho mais prático para quem espera simplesmente executar uma
> linha de comando passá-la pelo shell!
>
> Alexandre

Pois é, Alexandre, por isso que eu disse que é "meio que depreciado",
não tinha um termo melhor :)

Bem, usar o subprocess nunca foi muito trabalhoso para mim. Mas tudo
bem, não quero ser um soup nazi e ninguém vai morrer por usar o
os.system, então seja feliz :P

Até!


--
Adam Victor Nazareth Brandizzi
http://brandizzi.googlepages.com/

__._,_.___
.

__,_._,___
Reply all
Reply to author
Forward
0 new messages