【问题标题】:Executing subprocess.Popen inside Python script in PyDev context is different than running in terminal在 PyDev 上下文中的 Python 脚本中执行 subprocess.Popen 与在终端中运行不同
【发布时间】:2013-04-14 02:02:22
【问题描述】:

我正在执行这段代码:

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”并没有解决它。

【问题讨论】:

  • 您使用的是哪个操作系统(环境变量设置和设置位置不同)

标签: subprocess pydev


【解决方案1】:

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

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

要修复它,您可以

  • 使用os.setenv在你的python脚本中设置PATH
  • 将包含正确PATHenv dict 传递给Popen
  • 在你的 shellscript 中设置PATH
  • 在你的 shellscript 中使用完整路径
  • 在eclipse中设置PATH

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2017-06-14
    • 2022-01-08
    相关资源
    最近更新 更多