从Rails调用bash命令时,如何设置系统变量(例如$PYTHONPATH)?

2024-09-30 10:33:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我在AWS EC2 Ubuntu上有一个rails4应用程序。它将使用反勾号调用python程序:

    pyresult = `python /path/to/abc.py`

python程序在我的本地开发环境中运行得很好,但是在生产服务器上它失败了,没有任何错误。(pyresult为空)

我调试了很长时间,发现了一个可能的原因:$PYTHONPATH

在local上,我的.bashrc中有以下内容,python程序要求添加:

^{pr2}$

在服务器上,我还将它们添加到服务器上的.bashrc中。但是在我的应用程序中运行echo $PYTHONPATH会给我一个空字符串。在

然后我在我的rails应用程序中显式地添加了

    `export PYTHONPATH="$HOME/.local/lib/python2.7/site-packages/:$PYTHONPATH"`
    pyresult = `python /path/to/abc.py`

但是$PYTHONPATH仍然是空的。调用python程序仍然没有出错。在

猜猜是丢失的$PYTHONPATH引起了这个问题吗?如果是,如何解决问题?谢谢你的帮助。(很抱歉,我不熟悉linux,不熟悉python)


Tags: topathpy程序服务器aws应用程序ubuntu
2条回答

Linux没有系统变量,只有环境变量,这些变量只能由子进程继承。这条线

`export PYTHONPATH="$HOME/.local/lib/python2.7/site-packages/:$PYTHONPATH"`

仅为由反引号开始的子shell(以及从该子shell启动的任何进程)设置PYTHONPATH。一旦shell存在,PYTHONPATH的设置就消失了。在

您需要使用Ruby所拥有的任何工具来修改当前进程的环境,我收集到的(作为不使用Ruby的人)就是这样

^{pr2}$

然后炮弹从

pyresult = `python /path/to/abc.py`

将从当前Ruby进程继承其PYTHONPATH值。在

在使用open4gem运行命令后,我发现根本原因是paython程序找不到lib,它是通过设置.py. 所以这是另一个问题。在

相关问题 更多 >

    热门问题