关于python:subprocess open(‘source venv / bin / activate’),没有这样的文件?

subprocess open ('source venv/bin/activate'),no such file?

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

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

Traceback (most recent call last):
File"/Users/Ru/Desktop/mio/worker/run.py", line 3, in
subprocess.Popen(['source', '/Users/Ru/Desktop/mio/worker/venv/bin/activate'])

File"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in init
errread, errwrite)

File"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception

OSError: [Errno 2] No such file or directory


还有另一种更简单的方法可以做你想要的。
如果你想让python脚本使用virtualenv,你总是可以使用virualenv本身的python解释器。

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

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

如果要在子进程中运行该文件,可以执行与上述方法类似的操作:

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

并让my_python_file.py导入鼠标并执行您希望执行的其他操作。

汤姆。


我认为你的代码不起作用,因为你从文档中将'source'命令与virtualenv路径参数分开:

"Note in particular that options (such as -input) and arguments (such
as eggs.txt) that are separated by whitespace in the shell go in
separate list elements, while arguments that need quoting or
backslash escaping when used in the shell (such as filenames
containing spaces or the echo command shown above) are single list
elements."

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

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

我正在研究OSX,但这似乎不起作用,但可能是由于你正在使用的shell。要确保这可以工作,您可以使用shell = True标志:

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

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

汤姆。