2013-02-12 14 views
3

執行使用os.system(「蟒蛇」),我使用的是virtualenv執行一個腳本,該腳本中我稱之爲:內的virtualenv

os.system('python anotherScript.py') 

我的問題是,是否該腳本在同一執行作爲調用者腳本的virtualenv

+0

確保您可以使用'execfile'而不是'os.system'。這將在當前的解釋器中執行腳本(包含所有的up- *和* down-site)。 – Bakuriu 2013-02-12 18:45:19

+0

這取決於它在你的進程的PATH上找到哪個「python」。也許你可以讓腳本成爲一個模塊,然後在一個線程中運行它? – Keith 2013-02-12 21:41:42

回答

3

很難說,但如果你在激活的virtualenv下運行這個腳本,你應該在virutla環境下。您可以通過執行

#script.py 
import os 
os.system('which python') 

和命令行驗證你的想法

virtualenv newvirtualenv 
source newvirtualenv/bin/activate 
(newvirtualenv) [email protected]: python script.py 

你應該看到它是在newvirtualenv/bin/python

通常情況下,你想放的exectuable頭使用當前環境:

#!/usr/bin/env python 
import os 
os.system('which python') 

這不說使用newvirtualenv,bu如果劇本是在newvirtualenv下執行的,那麼你會更有信心,它一定會是newvirtualenv

如果你使用/usr/bin/python這在virtualenv下仍然可以。但對於高級程序員來說,他們傾向於擁有多個虛擬環境和多個Python版本。因此,根據它們的位置,他們可以根據環境變量執行腳本。只是一個小小的收益。

如果您運行newvirtualenv/bin/python script.py它將在virtualenv下無論如何。

只要python二進制文件指向virtualenv的版本,您就很好。

+0

我使用過'usr/bin/python',它在'virtualenv'下工作,謝謝 – nam 2013-02-13 10:28:11

+0

@HOAINAMNGUYEN我只想簡單地重申一下我的觀點。只要你運行'/ path/to/my/virtualenv/bin/python myscript.py',hashbang'#!/ usr/bin/python'就可以。如果你只是運行'python myscript.py',並且你沒有在激活的virtualenv下運行這個python,你將使用系統範圍的python來運行它。所以確保你激活你的virtualenv,或者不管頭是什麼樣的,總是指定'/ path/to/my/virtualenv/bin/python script.py'。 – CppLearner 2013-02-13 20:03:56