Comando 'comando' não encontrado no subprocesso python

0

Usar o comando command no script python a seguir não é bem-sucedido:

import subprocess

subprocess.run(["command", "-v", "yes"])

e resultados em

Traceback (most recent call last):
  File "command_test.py", line 3, in <module>
    subprocess.run(["command", "-v", "yes"])
  File "/usr/lib/python3.5/subprocess.py", line 383, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.5/subprocess.py", line 676, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.5/subprocess.py", line 1282, in _execute_child
    raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'command'

No shell (zsh), isso está funcionando como esperado:

$ command -v yes         
/usr/bin/yes

Como posso usar command em um subprocesso python? Tenho que instalar alguns pacotes adicionais?

Ambiente:

Debian 9 (stretch) com Python 3.5.3 e zsh 5.3.1

    
por eee 10.03.2018 / 11:16

3 respostas

3

command é um shell embutido, portanto, não é um objeto próprio no sistema de arquivos.

Veja man bash / man zsh ou help command .

$ python3 -c 'import subprocess ; subprocess.run(["bash","-c","command -v yes"])'
/usr/bin/yes

Pode ser uma solução (não tenho zsh instalado, portanto, meu exemplo usa bash ).

    
por 10.03.2018 / 11:24
0

Se você estiver usando o Python 3.5, não será necessário usar command -v para obter o caminho de um executável. Há shutil.which() (disponível em 3.3, eu acho).

import shutil
yes_path = shutil.which('yes')

Exemplo:

$ python3 -c 'import shutil; print(shutil.which("yes"))'
/usr/bin/yes
    
por 16.11.2018 / 10:49
-1
import subprocess
subprocess.run(['command', executable='/bin/bash',shell=True])
    
por 16.11.2018 / 10:10