【发布时间】:2015-12-03 07:04:48
【问题描述】:
我在 Python 中有一个子进程,它运行一个 Ruby 脚本。
import subprocess
cmd="ruby -v"
p=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, env={ 'PATH': '/sbin:/bin:/usr/bin' })
p.wait()
output, errors = p.communicate()
status = 'Estado de la app: ' + str(output) + 'Errores: ' + str(errors)
return status
问题在于它提供了错误的 Ruby 版本。它在服务器上运行,所以通过 SSH 我安装了 Ruby 2.2.1 和 rvm,当我运行 ruby -v 时,它给了我正确的信息。但是当我从 web2py 运行 python 时,它给了我一个旧版本的 Ruby,它是 /usr/bin/ruby 中的那个。
这就像子进程在一个完全不同的外壳中运行。会是什么?
谢谢
【问题讨论】:
-
SSH 进入盒子并运行
which ruby。在您的脚本中尝试相同的操作。尝试使用完整路径名来调用要在脚本中使用的 Ruby 解释器。 -
无关:放弃
p.wait()电话。它可能会使您的程序死锁,这里完全没有必要,请参阅What difference between subprocess.call() and subprocess.Popen() makes PIPE less secure for the former?
标签: python ruby subprocess