我在Python中有一个子进程,它运行一个Ruby脚本。Ruby从Python子进程运行给出错误版本
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运行在服务器上,我通过rvm安装了Ruby 2.2.1,当我运行ruby -v
时,它提供了正确的信息。但是当我从web2py运行python时,它给了我一个老版本的Ruby,它是/ usr/bin/ruby中的一个。
这就像子进程运行在一个完全不同的shell中。会是什么呢?
感谢
SSH进入箱子并运行'哪个ruby'。在脚本中尝试相同的操作。尝试使用完整路径名称来调用要在脚本中使用的Ruby解释器。 – chucksmash
无关:drop'p.wait()'调用。它可能导致程序死锁,并且在这里完全没有必要,请参见[subprocess.call()和subprocess.Popen()之间的区别是否使PIPE对前者的安全性较低?](http://stackoverflow.com/q/32364849/ 4279) – jfs