我遇到的问题是Eclipse/PyCharm不同于标准终端解释子进程的Popen()的结果。所有人都在OSX上使用python2.6.1。subprocess.Popen()在Eclipse/PyCharm和终端执行之间的行为不一致
这里有一个简单的示例脚本:
import subprocess
args = ["/usr/bin/which", "git"]
print "Will execute %s" % " ".join(args)
try:
p = subprocess.Popen(["/usr/bin/which", "git"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# tuple of StdOut, StdErr is the responses, so ..
ret = p.communicate()
if ret[0] == '' and ret[1] <> '':
msg = "cmd %s failed: %s" % (fullcmd, ret[1])
if fail_on_error:
raise NameError(msg)
except OSError, e:
print >>sys.stderr, "Execution failed:", e
使用标准终端,线路:
ret = p.communicate()
给我:
(Pdb) print ret
('/usr/local/bin/git\n', '')
Eclipse和PyCharm给我一个空的元组:
ret = {tuple} ('','')
更改shell =值也不能解决问题。在终端上,设置shell = True,并将命令完全传递(即,args = [“/ usr/bin/which git”])给了我相同的结果:ret =('/ usr/local/bin/git \ n','')。 Eclipse/PyCharm都给了我一个空元组。
关于我可能做错什么的想法?
哇,我刚刚在Windows下有同样的问题,你指出我在正确的方向!谢谢。从控制台启动的解释器可以访问“系统”和“当前用户”$ PATH变量,而从IDE或Explorer启动的解释器或程序只能访问“系统”$ PATH。 – 2013-08-19 09:04:48
什么解决方案让Eclipse包含终端提供的所有上下文?谢谢! – Tarelli 2014-09-26 12:23:27