2015-01-07 39 views
0

我把下面我python_go.py如何使用Python做了一系列的命令在終端

import os 
os.system("cd some_dir") # This is the directory storing an existing virtual environment 
os.system(". activate") #because I want to activate the virtual environment 
os.system("cd another_dir") #this the directory I can start my work 

我希望我可以運行python_go.py,它可以做上述工作。

但是當我運行它時,似乎它只能做第一步,其餘部分,例如. activate似乎無法正常工作。

有人可以告訴我該怎麼做嗎?謝謝!!

+0

'。激活「是什麼? – Hackaholic

+0

爲什麼不只是創建一個shell腳本?使用Python有什麼意義?順便說一下,它是'。/ activate',而不是'。 activate'。 – MattDMo

+0

你能教你如何使用Shell腳本來完成這項工作嗎? – user2988464

回答

0

最可能的是,你不必改變some_dir到源activate因此節約了這些線

. some_dir/activate 
cd another_dir 

如,假設go.sh和做

. go.sh 

具有相同的效果

0

如果你依靠os.system(「。activate」)工作,如果它位於some_dir目錄下,那將無法工作,因爲當前目錄不會跨越對os.system()的調用持續存在。

您最好調用一個shell腳本,它彙集了您想要執行的所有三個命令,並從python腳本執行一次。

否則,您需要在調用os.system之前使用os.chdir()設置父級python進程的環境。另外,os.system(「。activate」)調用不會做你想做的事情,因爲「點空間」符號會將信息加載到os.system調用完成時將消失的shell中。

編輯(您後續評論):

你的shell腳本應該是這樣的(do_activate.sh):

cd some_dir 
. activate 
cd another_dir 

和Python代碼是這樣的:

使用os.system ( 「db_activate.sh」)。

請記住,不管環境變量是否被「。activate」保存,都不會在os.system調用後持續存在。

+0

那我該怎麼辦呢? – user2988464

0

你的代碼什麼都不做。 os.system()爲每個命令啓動一個新shell,即所有os.system()調用都沒有正面影響:cd. activate可能僅對當前的 shell(以及可能的子節點)有效。

如果你想要的是激活當前殼的virtualenv那麼你應該使用shell命令:

$ . some_dir/activate && cd another_dir 

注:該命令只有在當前(運行)外殼及其後代的影響( )。

virtualenvwrapper提供了幾個鉤子,允許在激活virtualenv之前/之後執行命令。,你可以把cd another_dir$VIRTUAL_ENV/bin/postactivate那麼它足以運行:

$ workon <virtualenv-name> 

激活virtualenv-name的virtualenv並運行所有的鉤子(在這種情況下cd another_dir)。

0

你可能想要安裝virtualenvwrapper這你想要做什麼:

  • workon envname將源文件並激活的virtualenv。

然後,您可以在所需的目錄中執行setvirtualenvproject,然後您將自動轉到項目所在的目錄。你只需要執行一次這個命令,因爲它會從那時起自動發生。