子进程打开('source venv/bin/activate'),没有这样的文件?

问题描述 投票:0回答:2

我想进入Python文件中的虚拟环境。但它没有引发这样的文件。

import subprocess 
subprocess.Popen(['source', '/Users/XX/Desktop/mio/worker/venv/bin/activate'])

回溯(最近一次调用最后一次): 文件“/Users/Ru/Desktop/mio/worker/run.py”,第 3 行,位于 subprocess.Popen(['源', '/Users/Ru/Desktop/mio/worker/venv/bin/activate'])

文件“/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第710行,在init 读错,写错)

文件“/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第1335行,在_execute_child中 引发 child_Exception

OSError:[Errno 2]没有这样的文件或目录

python subprocess virtualenv
2个回答
1
投票

还有另一种更简单的方法可以做你想做的事。 如果您希望 python 脚本使用 virtualenv,您始终可以使用 virtualenv 本身的 python 解释器。

/Users/Ru/Desktop/mio/worker/venv/bin/python my_python_file.py

这将使用 virtualenv 的属性/库运行 my_python_file.py。

如果您想在子进程中运行该文件,您可以执行类似于我上面描述的方法的操作:

import subprocess 
subprocess.Popen(['/Users/Ru/Desktop/mio/worker/venv/bin/python my_python_file.py])

并让 my_python_file.py 导入 pika 并执行您想做的其他操作。


0
投票

我认为您的代码不起作用,因为您将“source”命令与 virtualenv 路径参数、与 documentation:

分开

“特别注意选项(例如 -input)和参数(例如 如 Eggs.txt),在 shell 中以空格分隔,进入 单独的列表元素,而需要引用或的参数 在 shell 中使用时反斜杠转义(例如文件名 包含空格或上面显示的 echo 命令)是单个列表 元素。

您应该尝试以下两件事之一: 首先,将源和 virtualenv 文件路径写为单个字符串参数:

import subprocess 
subprocess.Popen(['source '/Users/XX/Desktop/mio/worker/venv/bin/activate'])

我正在 OSX 上工作,这似乎不起作用,但这可能是由于您正在使用的 shell 造成的。为了确保这有效,您可以使用 shell=True 标志:

import subprocess
subprocess.Popen(['source '/Users/XX/Desktop/mio/worker/venv/bin/activate'],shell=True)

默认情况下,这将使用 /bin/sh shell。同样,您可以在文档中阅读更多内容。

汤姆。

© www.soinside.com 2019 - 2024. All rights reserved.