Get bash output with python

Deadly 提交于 2019-12-24 11:14:20

问题


I'm trying to make a simple command that will let me run bash fully in Python, including output strings.

This function worked great on systems I use at my job:

import subprocess

def run(command):
    output = subprocess.check_output(command, shell=True)
    return output

However, now I'm using it at home and the PATH variable doesn't match the one in my Terminal.

So when I execute

run('ls')

I get this:

/bin/sh: ls: command not found

Which makes sense because, nonsensically, the PATH I get from running

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

is

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

Now, I could remedy all this by using:

run('/bin/ls')

But that defeats the entire purpose of using this command, which is to faithfully emulate the bash shell.

How do I make run() use the system's PATH or create an equivalent function that just works?

(No platitudes about the dangers of using 'shell=True', please. This is all personal use with innocuous commands like ls and ps axw.)


回答1:


I'm leaving this question up because I think the run() command above is useful and I couldn't find anything similar on SO.

However, my solution was very system specific. The problem was, I am running this script within Sublime Text 2 and had manually replaced the path in Python.sublime-settings with

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

I did this because I'd had problems getting ST2 to find the right version of python. Well, this also overwrites the system-wide PATH variable within ST2, thus blocking my access to simple shell programs like ls.

Erasing the "path": ... line from Python.sublime-settings fixed my problem.

EDIT

As suggested by mklement0, changing the line to append the path works as well:

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


来源:https://stackoverflow.com/questions/23183924/get-bash-output-with-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!