executa comandos shell através do módulo module e subprocess, um funciona e o outro não funciona

1

Estou aprendendo como executar comandos shell através do módulo os e do módulo subprocessado. O seguinte é o meu código.

from subprocess import call
call('/usr/lib/mailman/bin/find_member -w user_email')
import os
os.system('/usr/lib/mailman/bin/find_member -w user_email')

O segundo funciona muito bem, enquanto, por outro lado, o primeiro não funciona, e eu recebi os seguintes erros.

Traceback (most recent call last):
  File "fabfile.py", line 6, in <module>
    call('/usr/lib/mailman/bin/find_member -w user_email')
  File "/usr/lib64/python2.6/subprocess.py", line 478, in call
    p = Popen(*popenargs, **kwargs)
  File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

Eu achei que esses dois métodos têm o mesmo efeito. Você poderia me apontar quais são os possíveis erros aqui? Muito obrigado.

    
por josephS 12.06.2017 / 21:58

1 resposta

1

Uma diferença entre os dois está documentada ( aqui )

os.system(command)

Execute the command (a string) in a subshell.

Embora subprocess.call() se pareça com:

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

Run the command described by args. Wait for command to complete, then return the returncode attribute.

Para que subprocess.call() se comporte como os.system() , é necessário passar shell=True . Então, algo como:

from subprocess import call
call('/usr/lib/mailman/bin/find_member -w user_email', shell=True)
    
por 12.06.2017 / 22:24

Tags