【发布时间】:2014-06-04 17:20:20
【问题描述】:
我正在尝试编写一个简单的命令,让我可以在 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
这是有道理的,因为毫无意义,我从运行中得到的 PATH
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 等无害命令。)
【问题讨论】:
-
铅 (plumbum.readthedocs.org) 库源可能会有所帮助。
-
在python进程中
os.getenv('PATH')在工作和家里返回什么? -
在家里,就是上面列出的可笑的
/Library/Frameworks/Python.framework/Versions/Current/bin/。工作上,更懂事/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/software/dist/admin/bin:/opt/www/htdig/bin:/usr/lib/java/bin:/usr/lib/java/jre/bin:/usr/share/texmf/bin -
我在 Sublime Text 2 中运行 Python 脚本。我认为这是相关的,因为我在家中从运行
os.getenv('PATH')的python可执行文件中获得了更好的路径。 -
是的。这就对了。该命令在终端中运行良好,
python <script>。
标签: python bash sublimetext2 subprocess