首页 > 解决方案 > subprocess.check_output() : 设置 parm executable='/bin/bash' 时找不到 bash 命令

问题描述

我在 Centos 机器上运行 Python 3.6。

这是我的非工作代码

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命令有效。

我无法弄清楚问题是什么。有人有想法吗?

标签: pythonpython-3.xbashsubprocess

解决方案


不要依赖定义的个人 shell 配置中的别名;拼出您希望它解析的命令。

shell_command = subprocess.check_output(["ls", "-l", "--color=auto"], universal_newlines=True)

推荐阅读