2011-05-27 47 views
8

我想使用子進程更改當前目錄。如何使用子進程替換目錄

例如:

import os, sys, subprocess 

os.environ['a'] = '/home' 
os.environ['b'] = '/' 

subprocess.call('cd $a', shell=True) 
subprocess.call('ls', shell=True) 

subprocess.call('cd $b', shell=True) 
subprocess.call('ls', shell=True) 

我認爲這應該像一個命令行UNIX

$ export a='/home' 
$ export b='/' 

$ cd $a 
$ ls 
$ cd $b 
$ ls 

但它不會發生..

我該怎麼做才能改變當前目錄?

謝謝。

+2

我不認爲這是可能的。子進程的子目錄不會影響當前進程的目錄。你想要完成什麼? – 2011-05-27 15:13:46

回答

13

改變目錄只需使用os.chdir()

您也可以通過運行subprocess.Popen(...)來執行特定命令中的命令 - 它有一個可選參數cwd=None。只需使用它來指定工作目錄。另外,你可以看看我寫的一個小模塊,它完成了Python標準庫中的一些缺失功能。可能這個模塊尤其是https://github.com/ssbarnea/tendo/blob/master/tendo/tee.py

+0

難道沒有其他解決方法嗎? – JonatasTeixeira 2011-05-27 15:17:37

+1

順便說一句,您不能從被調用的項目中更改調用進程的當前目錄。我甚至不知道爲什麼你會想要這樣做。 – sorin 2011-05-27 15:20:39

+1

這篇文章是如何回答這個問題的? – khachik 2011-05-27 15:23:42