我从Python调用cmd是这样的:
subpocess.Popen(['coffee'], shell=True)
我相信被翻译成:
/bin/sh -c "coffee"
从文档中我看到,在非交互模式文件(如/ etc / profile)中,不会读取/etc/bash.bashrc,并使用默认的$ PATH(init $ PATH)。 我愿意吗? 有没有添加咖啡到$ PATH的唯一方法是将其复制到/ usr / local / bin?
在启动shell之前,您可以在Python脚本中修改PATH环境variables,即:
import os os.environ['PATH'] = '/some/new/path:%s' % os.environ['PATH'] subpocess.Popen(['coffee'], shell=True)
请注意,设置shell=True通常是不必要的,您应该意识到这样做的意义,特别是在您使用用户提供的数据调用Popen 。 一般的问题是,包含shell元字符(例如“>”或“;”,“&”)等等的数据可能会导致意外的行为。
更新 :例如,如果我有一个名为/tmp/foo的脚本,我想用subprocess.Popen来运行这个脚本,
>>> import os, subprocess >>> os.environ['PATH'] = '/tmp:%s' % os.environ['PATH'] >>> subprocess.Popen('foo', shell=False)
如果我不设置PATH ,那么我得到预期的错误:
OSError: [Errno 2] No such file or directory