用python获取bash输出

时间:2014-04-20 15:05:11

标签: python bash sublimetext2 subprocess

我试图创建一个简单的命令,让我在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'的危险,请不要陈词滥调。这是个人使用的无关命令,如lsps axw。)

1 个答案:

答案 0 :(得分:1)

我离开了这个问题,因为我认为上面的run()命令很有用,我在SO上找不到类似的东西。

但是,我的解决方案非常符合系统。问题是,我在Sublime Text 2中运行此脚本并手动替换了Python.sublime-settings中的路径

"path": "/Library/Frameworks/Python.framework/Versions/Current/bin/",

我这样做是因为我在找到正确版本的python时遇到了问题。好吧,这也会覆盖ST2中的系统范围的PATH变量,从而阻止我访问像ls这样的简单shell程序。

"path": ...删除Python.sublime-settings行解决了我的问题。

修改

作为suggested by mklement0,将行更改为追加路径也可以:

"path": "$PATH:/Library/Frameworks/Python.framework/Versions/Current/bin/",