2013-06-28 257 views
2

我期待在python腳本的子目錄中運行bash腳本。這個bash腳本應該像執行當前目錄一樣執行所有的操作。除了將目錄作爲參數傳遞並使用它來指揮所有呼叫之外,是否有任何方法可以做到這一點?從腳本當前目錄中運行Python中的子進程bash腳本

基本上沿着

for i in range(1,100): 
    subprocess.call(['/some%s/task.sh' % i, arg1]) 

線的東西在腳本的工作與某些%s的目錄內的文件的內容。

回答

2

subprocess.call有這個cwd關鍵字參數:

for i in xrange(1, 100): 
    subprocess.call(["./task.sh", arg1], cwd=("/some%d" % i)) 

(這被證明只是含蓄:「完整的函數簽名相同的Popen構造 - 這個功能通過所有提供「cwd列出在Popen。)

+0

OP的問題包括:「除了傳遞目錄作爲參數並使用它來指揮所有呼叫之外,是否有任何方法可以做到這一點」您的答案完全是他們不想做的! –

+0

@SteveBarnes:我讀到的意思是「腳本的一個參數」。這是在Python中使用它的正確方法。 –

+0

+1:這是正確的做法。 – jfs

0

沒錯,

就在你的循環programitically保存當前工作目錄和subprocess.call之前改變當前的工作目錄爲/某些%s和然後將其設置回原始值,當你完成。

import os 
Orig = os.path.abspath('.') 
for i in range(1,100): 
    os.chdir('/some%s' % i) 
    subprocess.call(['./task.sh' % i, arg1]) 
os.chdir(Orig) 
+0

爲了可靠性,您應該添加一些try:除了control之外,以確保dir ectory和腳本都存在。 –

+1

從'chdir()'中移除'test.sh',否則調用失敗。 –

+0

這是不可靠的;一個例外將永久改變目錄。這也是不必要的複雜。 –