【问题标题】:Get bash output with python使用 python 获取 bash 输出
【发布时间】: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' 的危险进行陈词滥调。这都是个人使用lsps 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


【解决方案1】:

我把这个问题留了下来,因为我认为上面的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,将行更改为追加路径也可以:

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

【讨论】:

  • 附加到现有的$PATH,使用"path": "$PATH:/Library/Frameworks/Python.framework/Versions/Current/bin/"
猜你喜欢
  • 2015-06-19
  • 2021-07-13
  • 1970-01-01
  • 2017-02-03
  • 2016-01-22
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
相关资源
最近更新 更多