虚拟和平subprocess:如何获取脚本的正确路径

时间:2016-08-17 14:56:57

标签: python subprocess virtualenv circusd

当有人安装我的Python包时,他们可以使用命令mycmd(它是添加到python bin/目录的控制台脚本)。反过来,mycmd使用subprocess启动其他几个Python控制台脚本:

subprocess.Process('celery arg1 arg2') subprocess.Process('huey arg1 arg2') ...

celeryhuey命令通过我的软件包的pip依赖项安装。)

这通常可以正常工作,除非有人直接调用mycmd而不激活其virtualenv。例如,我试图在过程控制系统“circusd”中使用mycmd。请参阅here circus.ini文件直接调用venv/bin/chaussette的位置Honcho,而不实际激活venv。如果我这样做,我得到消息celery: No such file or directory,我认为因为virtualenv没有被激活,因此在路径上找不到那些命令。

如果有人运行mycmd,即使未激活virtualenv,我还能确保运行正确的celery (并且如果此人也应该工作根本没有使用virtualenv,跨平台等。)

顺便说一下,我没有直接使用subprocess.Process,而是使用http://docs.oracle.com/javaee/6/api/javax/persistence/criteria/Path.html#get%28java.lang.String%29,它提供了一个图层。

1 个答案:

答案 0 :(得分:0)

我只是通过将{virtity bin路径添加到PATH使用的circus来解决这个问题。