我期待在python腳本的子目錄中運行bash腳本。這個bash腳本應該像執行當前目錄一樣執行所有的操作。除了將目錄作爲參數傳遞並使用它來指揮所有呼叫之外,是否有任何方法可以做到這一點?從腳本當前目錄中運行Python中的子進程bash腳本
基本上沿着
for i in range(1,100):
subprocess.call(['/some%s/task.sh' % i, arg1])
線的東西在腳本的工作與某些%s的目錄內的文件的內容。
我期待在python腳本的子目錄中運行bash腳本。這個bash腳本應該像執行當前目錄一樣執行所有的操作。除了將目錄作爲參數傳遞並使用它來指揮所有呼叫之外,是否有任何方法可以做到這一點?從腳本當前目錄中運行Python中的子進程bash腳本
基本上沿着
for i in range(1,100):
subprocess.call(['/some%s/task.sh' % i, arg1])
線的東西在腳本的工作與某些%s的目錄內的文件的內容。
subprocess.call
有這個cwd
關鍵字參數:
for i in xrange(1, 100):
subprocess.call(["./task.sh", arg1], cwd=("/some%d" % i))
(這被證明只是含蓄:「完整的函數簽名相同的Popen
構造 - 這個功能通過所有提供「cwd
列出在Popen
。)
沒錯,
就在你的循環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)
爲了可靠性,您應該添加一些try:除了control之外,以確保dir ectory和腳本都存在。 –
從'chdir()'中移除'test.sh',否則調用失敗。 –
這是不可靠的;一個例外將永久改變目錄。這也是不必要的複雜。 –
OP的問題包括:「除了傳遞目錄作爲參數並使用它來指揮所有呼叫之外,是否有任何方法可以做到這一點」您的答案完全是他們不想做的! –
@SteveBarnes:我讀到的意思是「腳本的一個參數」。這是在Python中使用它的正確方法。 –
+1:這是正確的做法。 – jfs