【问题标题】:How to activate virtualenv using python subprocess module?如何使用 python 子进程模块激活 virtualenv?
【发布时间】:2019-08-07 10:03:51
【问题描述】:

我正在尝试使用 python 的 subprocess 模块调用 shell 脚本。 shell 脚本使用 virtualenvwrapper 激活 virtualenv,然后调用 python 脚本。 最后调用的 python 脚本需要安装在 virtualenv 中的库,它正在崩溃。

尝试在 python 脚本中再次激活 virtualenv 但没有用

父 Python 代码-

command = "/home/arman/analysis_server/new_analysis/run"

output = subprocess.Popen([command], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

/运行脚本-

#!/bin/bash

export WORKON_HOME=~/Envs

source /usr/local/bin/virtualenvwrapper.sh

workon analytics

python /home/arman/analysis_server/new_analysis/AnalysisWrapper.py

AnalysisWrapper.py -

cmd = "python /home/arman/analysis_server/new_analysis/DataHandlerWrapper.py " + instrument + " &"

subprocess.Popen(cmd, shell=True, executable='/bin/bash', stdout=out, stderr=out)

DataHandlerWrapper.py 脚本需要 virtualenv,但它正在崩溃

【问题讨论】:

  • 您是否收到错误消息?始终将完整的错误消息(从“Traceback”一词开始)作为文本(不是屏幕截图)提出问题(不是评论)。还有其他有用的信息。
  • 你不能用python /home/arman/analysis_server/new_analysis/DataHandlerWrapper.py instrument &AnalysisWrapper.py 转换为bash 脚本吗?甚至使用为DataHandlerWrapper.py 激活 virtualenv 的代码。
  • 不,实际上有一些检查和逻辑可以杀死 AnalysisWrapper.py 中过时的 DataHandlerWrapper 进程,之后它会使用给定的参数调用 DataHandlerWrapper
  • 类似的......可能是的副本
  • 并且没有错误消息,只是我看不到 DataHandlerWrapper 进程在此之后运行。如果直接从 ./run 之类的 shell 调用它,但从 python 代码调用时不起作用

标签: python bash subprocess virtualenvwrapper


【解决方案1】:

我认为您的问题是 Popen 产生了一个子shell,因此您在一个子进程中激活 virtualenv 并尝试在另一个子进程中使用它永远不会起作用。

如果两者之间没有发生任何事情,您也许可以尝试将您的命令链接到同一个进程中:

command = "/home/arman/analysis_server/new_analysis/run && python /home/arman/analysis_server/new_analysis/DataHandlerWrapper.py " + instrument + " &"

【讨论】:

  • 旁注:如果您不习惯在这种情况下使用 virtualenv,您可能还想看看 pipx,这可能会有所帮助:pipxproject.github.io/pipx
猜你喜欢
  • 1970-01-01
  • 2011-10-20
  • 2018-10-28
  • 2019-09-08
  • 1970-01-01
  • 2016-03-02
  • 2018-07-11
相关资源
最近更新 更多