subprocess open('source venv / bin / activate'),没有这样的文件?

时间:2016-07-13 12:01:26

标签: python subprocess virtualenv

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

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

追踪(最近一次通话):     文件“/Users/Ru/Desktop/mio/worker/run.py”,第3行,in       subprocess.Popen(['source','/ 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       errread,errwrite)

     

文件“/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]没有这样的文件或目录

2 个答案:

答案 0 :(得分:1)

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

  

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

您应该尝试以下两种方法之一: 首先,将source和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。同样,您可以在文档中阅读更多内容。

汤姆。

答案 1 :(得分:1)

还有另一种更简单的方法可以做你想做的事。 如果你想让python脚本使用virtualenv,你总是可以使用virualenv本身的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导入鼠标并执行您希望执行的其他操作。

汤姆。