在PyDev上下文中执行Python脚本中的subprocess.Popen与在终端中运行不同

时间:2013-04-20 21:54:53

标签: subprocess pydev

我正在执行此代码:

p = subprocess.Popen(['/path/to/my/script.sh','--flag'] , stdin=subprocess.PIPE)
p.communicate(input='Y')
p.wait()

使用“python scriptName.py”在shell上执行时,它可以正常工作, 但是当在Eclipse中使用PyDev执行时,它失败了,原因是:

  

/path/to/my/script.sh:line 111:service:command not found

此bash脚本“script.sh”包含以下导致错误的命令:

  

service mysqld restart

因此,从PyDev的上下文运行.sh脚本时,无法识别“service”。 我想这与一些ENV VAR配置有关,找不到怎么做。

  • BTW - 调用subprocess时使用“shell = True”.Popen没有解决它。

1 个答案:

答案 0 :(得分:1)

service通常位于/usr/sbin,此目录不在PATH上。由于这通常包含管理二进制文件和脚本(并非设计为由所有人运行)(仅限管理员/ root),因此sbin目录默认情况下并不总是添加到PATH

要检查此情况,请尝试在脚本中打印PATH(或添加env命令)。

要修复它,你可以

  • 使用os.setenv
  • 在您的python脚本中设置PATH
  • 将包含正确env的{​​{1}} dict传递给PATH
  • 在您的shellscript中设置Popen
  • 使用您的shellscript中的完整路径
  • 在eclipse中设置PATH