python - 使用 python 获取 bash 输出

标签 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

这是有道理的,因为,无意义的是,我从运行中获得的路径

print run('/usr/bin/env') 

PATH=/Library/Frameworks/Python.framework/Versions/Current/bin/

现在,我可以使用以下方法来解决这一切:

run('/bin/ls')

但这违背了使用此命令的全部目的,即忠实地模拟 bash shell。

如何让 run() 使用系统的 PATH 或创建一个可以正常工作的等效函数?

(请不要再说使用 'shell=True' 的危险。这都是个人使用的无害命令,例如 lsps 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/

相关文章:

python - 如何提高涉及生成器和嵌套 for 循环的代码的效率

python - 从字符串中解析格式奇怪的时间表达式

sublimetext2 - 如何在选定行前插入空格?

c++ - Arduino Sublime Text 2。我可以编译但不能上传。错误 "The system cannot find the file specified"

python - 如何使 Cython 可见我的 Python 模块?

python - 如何使用某些构造函数创建派生类? (Python)

sql - 在 oracle 中插入和更新文件中的行

python - gunicorn - 如果从 shell 脚本执行则不获取配置文件

linux - 通过网络优化 SCP

algorithm - Sublime Text 使用哪种算法/数据结构进行文件搜索