我正在尝试创建一个简单的命令,让我可以在 Python 中完全运行 bash,包括输出字符串。
此功能在我工作中使用的系统上运行良好:
import subprocess
def run(command):
output = subprocess.check_output(command, shell=True)
return output
但是,现在我在家里使用它,并且 PATH 变量与我的终端中的变量不匹配。
所以当我执行
run('ls')
我明白了:
/bin/sh: ls: command not found
这是有道理的,因为,无意义的是,我从运行中获得的路径
print run('/usr/bin/env')
是
PATH=/Library/Frameworks/Python.framework/Versions/Current/bin/
现在,我可以使用以下方法来解决这一切:
run('/bin/ls')
但这违背了使用此命令的全部目的,即忠实地模拟 bash
shell。
如何让 run() 使用系统的 PATH 或创建一个可以正常工作的等效函数?
(请不要再说使用 'shell=True'
的危险。这都是个人使用的无害命令,例如 ls
和 ps axw
。)
最佳答案
我留下这个问题是因为我认为上面的run()
命令很有用,而且我在SO上找不到类似的东西。
但是,我的解决方案非常特定于系统。问题是,我在 Sublime Text 2 中运行此脚本,并手动将 Python.sublime-settings
中的路径替换为
"path": "/Library/Frameworks/Python.framework/Versions/Current/bin/",
我这样做是因为我在让 ST2 找到正确版本的 python
时遇到问题。嗯,这也会覆盖 ST2 中的系统范围 PATH 变量,从而阻止我访问简单的 shell 程序,例如 ls
。
从 Python.sublime-settings
中删除 "path": ...
行解决了我的问题。
编辑
如suggested by mklement0 ,将行更改为 append 路径也有效:
"path": "$PATH:/Library/Frameworks/Python.framework/Versions/Current/bin/",
关于python - 使用 python 获取 bash 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23183924/