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.
<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
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]
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/
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]
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]
------------------------------------
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/