subprocess.check_output (): команда bash не найдена при установке исполняемого файла parm = '/ bin / bash' - PullRequest
0 голосов
/ 25 марта 2020

Я бегу Python 3.6 на коробке Centos.

Вот мой нерабочий код

shell_command = subprocess.check_output(["ll"],shell=True, universal_newlines=True, executable='/bin/bash')

Вот вывод:

/bin/bash: ll: command not found
Traceback (most recent call last):
  File "./snmp_test.py", line 17, in <module>
    shell_command = subprocess.check_output(["ll"],shell=True, universal_newlines=True, executable='/bin/bash')
  File "/data/prod_envs/pythons/python36/lib/python3.6/subprocess.py", line 336, in check_output
    **kwargs).stdout
  File "/data/prod_envs/pythons/python36/lib/python3.6/subprocess.py", line 418, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['ll']' returned non-zero exit status 127

Итак, судя по ошибке

/bin/bash: ll: command not found

bash не знает ll

, что странно, потому что echo "$SHELL" возвращает

/bin/bash

и через CLI работает команда ll.

Я не могу понять, в чем проблема. У кого-нибудь есть идея?

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Не полагайтесь на псевдонимы из вашей персональной конфигурации оболочки; укажите команду, которую вы хотите разрешить.

shell_command = subprocess.check_output(["ls", "-l", "--color=auto"], universal_newlines=True)
0 голосов
/ 25 марта 2020

обнаружил, что 'll' является псевдонимом, и изменил строку кода на

shell_command = subprocess.check_output("ls -l --color=auto",shell=True, universal_newlines=True, executable='/bin/bash')

, и теперь он работает как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...