我试图做一个简单的命令,让我可以在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等无害的命令。)

===============>>#1 票数:1

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

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

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

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

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

编辑

mklement0建议 ,更改行以追加路径也可以:

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

  ask by Chris Redford translate from so

未解决问题?本站智能推荐:

1回复

python 3打开终端并运行程序

我在sublime中制作了一个小脚本,该脚本将从用户计算机上的json文件中提取命令,然后它将打开终端并运行设置/命令。 除了不真正打开终端,这可以工作。 它仅运行命令(并且可以运行,因为在我的情况下,它将运行gcc来编译简单的C文件),并通过管道将其发送到STDOUT而不打开终端。
1回复

Python获取bash双选项完成输出

我正在用python编程Ros接口,并且我希望能够在选择包后从显示所有可用节点的列表中选择要运行的节点。 换句话说,我想创建包含在包中的所有节点的列表,以获取如果输入以下内容将在终端中得到的输出: 在python代码方面,我尝试做的一个错误示例可能是: 但这是行不通的,因为
1回复

使用Python ssh然后运行bash脚本。 我需要在屏幕上显示正在运行的bash脚本的输出

我正在使用Python(OSX Python 2.7.10)ssh进入Debian框(Python 2.7.9),然后运行bash脚本(./capture)。 bash脚本包含一些tcpdump命令。 我无法弄清的问题是如何在终端上显示正在运行的bash脚本的实时结果。 我能够ssh
1回复

捕获在python中运行的bash代码的输出

我正在尝试使用以下代码捕获我在python脚本中执行的bash行的输出: 这可以正常工作,但我想对其进行更改,以便将bash代码直接写入此python脚本中(消除了对单独的.sh文件的需要)。 我知道我可以使用subprocess.call()从python运行bash代码,但我不知道
1回复

解释bash在Python子过程模块中的输出

我一直在研究Doug Helmann的PYMOPTW上的subprocess模块示例。 这是我遇到的麻烦的代码片段。 我知道exit 1应该会引发错误,并且except子句会运行。 我不明白为什么不打印to stdout而是打印to stderr 。 运行echo to st
1回复

Python-执行bash命令,同时打印并保存输出[重复]

这个问题已经在这里有了答案: 如何将subprocess.call()输出推送到终端和文件? 2个答案 从Python,我想执行一个bash命令(也许与subprocess.Popen()一起使用),并且我想打印输出,并且同时将输出保存到变量或文件中。 此命令返
2回复

在Python中运行多个bash行,并分别检查其状态和输出

我试图在Python 3中执行几行bash并分别检查每行的状态。 我首先尝试使用subprocess gestatusoutput ,但是每一行都是在一个单独的进程中运行的,该进程不会与其他进程进行通信(为简单起见,给定的MWE由设置变量组成,但是我打算在实际中执行此操作代码比这更复杂-对
1回复

使用子进程在python 2.7中获取tail cmd输出

我正在尝试通过python尾部文件的内容。 我正在使用的代码如下 上面的代码抛出如下错误: 如果我直接在bash中使用文件路径执行tail命令,则会看到输出。 为什么子进程在执行tail命令时传递额外的反引号(`)? 更新: 我最终使用glob按照@cdar
3回复

在Python中使用参数执行bash命令

这是我在python中运行的bash命令,并获得了预期的结果: 但是当我想传递参数(在这种情况下为count)时,无法弄清楚该如何做。 我试过了: 和 其他尝试,来自此处的各种帖子,但仍然无法实现。
1回复

使用python运行bash脚本 - TypeError:bufsize必须是整数

我正在尝试编写python文件,这是python中的wxtrac tar文件。 据我所知, subprocess是完成此任务的合适工具。 我写下面的代码: 当输出是tar文件时,它位于/root/tryit/ 。 当我运行它时,我收到以下消息: 我可以在这个工具