2015-07-20 62 views
1

我需要執行一個程序,該程序位於執行程序的python腳本位置之外的另一個目錄中。 例如,如果我的python腳本位於/ home/Desktop並且我的程序'Upgrade'位於/ home/bin中,那麼我將如何使用python腳本執行它?我試過這種方式:在Python中執行位於另一個目錄中的程序

import subporcess 
subprocess.call('cd /home/bin') 
subprocess.call('./Upgrade') 

但問題是該目錄實際上沒有通過使用subprocess.call('cd/home/bin')更改。

我該如何解決這個問題?

+0

你是否要求子進程的當前工作目錄是'/ home/bin'?你沒有在文中說明,但你的代碼建議你試着去做(儘管失敗)。 – skyking

回答

2

的子模塊支持設置當前工作目錄子,FX:

subprocess.call("./Upgrade", cwd="/home/bin") 

如果你不關心你的子進程的當前工作目錄,你當然可以提供的完全限定名可執行文件:

subprocess.call("/home/bin/Upgrade") 

您可能還需要使用subprocess.check_call功能(如果你想拋出一個異常,如果子進程不返回零返回代碼)。

解決方案的問題是,您啓動一​​個子進程,在該子進程中嘗試執行「cd/home/bin」,然後啓動另一個子進程,在其中嘗試執行「./Upgrade」 - 當前工作目錄後者不受前者目錄變化的影響。

請注意,將外殼提供給call方法有一些缺點(和優點)。缺點(或優點)是你會得到各種shell擴展(通配符等)。一個缺點可能是shell可能根據你的平臺不同地解釋命令。

1

您可以使用操作系統更改目錄。 python腳本將保留在它創建的文件夾中,但會根據新目錄運行進程。

import os 

os.chdir() 
os.chdir('filepath') 
0

嘗試

import os 
os.system('python /home/bin/Upgrade') 

如果你的程序是不是一個.py,那麼就

os.system('/home/bin/Upgrade') 

os.system('cd /home/bin|./Upgrade') 
+0

這不會更改OP可能需要的子流程的當前工作目錄。他的問題並不清楚他想要那樣,但是提供的代碼表明這一點。 – skyking

+1

@skyking由於問題不清楚我使用問題標題('在Python中的另一個目錄中執行一個程序')猜測這是實際問題 – Andersson

+0

@Andersson是的,如果這是OP想要的,那麼你的解決方案可能會做。我只是想明確指出,這不會改變當前的工作目錄 - 以防萬一這是OP實際需要的。 – skyking

0

,或者你可以看看相關的蟒蛇進口,取決於什麼它的確如何在更新目錄中構建您的腳本

1

另一種替代方法是加入這兩個命令。

import subporcess 
subprocess.call('cd /home/bin; ./Upgrade', shell=True) 

這樣您就不需要更改腳本運行目錄。

相關問題