我正在执行此代码:
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配置有关,找不到怎么做。
答案 0 :(得分:1)
service
通常位于/usr/sbin
,此目录不在PATH
上。由于这通常包含管理二进制文件和脚本(并非设计为由所有人运行)(仅限管理员/ root),因此sbin
目录默认情况下并不总是添加到PATH
。
要检查此情况,请尝试在脚本中打印PATH
(或添加env
命令)。
要修复它,你可以
os.setenv
env
的{{1}} dict传递给PATH
Popen
PATH