python命令符bash,获取与Python的bash输出

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.)

解决方案

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/",

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值