1

我正在执行这段代码:

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:第 111 行:服务:找不到命令

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

服务 mysqld 重启

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

  • 顺便说一句 - 调用 subprocess.Popen 时使用“shell=True”并没有解决它。
4

1 回答 1

1

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

要检查这一点,请尝试PATH在您的脚本中打印(或添加env命令)。

要修复它,您可以

  • 使用在你的 python 脚本中设置 PATHos.setenv
  • 传递一个env包含正确的字典PATHPopen
  • PATH在你的 shellscript 中设置
  • 在你的 shellscript 中使用完整路径
  • PATH在日食中设置
于 2013-04-20T22:40:55.187 回答