如何使用子進程模塊來運行bash腳本,我必須給出幾個參數?Python:子進程並運行帶有多個參數的bash腳本
這是我目前使用:
subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3], \
shell = True)
的bash腳本似乎並沒有被採取任何參數的任何見解是極大的讚賞!
如何使用子進程模塊來運行bash腳本,我必須給出幾個參數?Python:子進程並運行帶有多個參數的bash腳本
這是我目前使用:
subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3], \
shell = True)
的bash腳本似乎並沒有被採取任何參數的任何見解是極大的讚賞!
傳遞參數的列表,請參閱the very first code example in the docs:
import subprocess
subprocess.check_call(['/my/file/path/programname.sh', 'arg1', 'arg2', arg3])
如果arg3
不是字符串;將其轉換爲字符串後傳遞到check_call()
:arg3 = str(arg3)
。
您忘記了添加args
的名字。
subprocess.Popen(args=['./test.sh', 'arg1 arg2 %s' % arg3], shell=True)
所以文件路徑也需要在args中設置? – user2510173
subprocess.Popen(['/my/file/path/programname.sh arg1 arg2 %s' % arg3], shell = True).
如果使用shell = True
腳本和它的參數必須作爲字符串傳遞。 args
序列中的任何其他元素都將被視爲shell的參數。
您可以在http://docs.python.org/2/library/subprocess.html#subprocess.Popen找到完整的文檔。
嗨,我知道這是解決方案是相當晚,但可以幫助某人。
例如:
import subprocess
pass_arg=[]
pass_arg[0]="/home/test.sh"
pass_arg[1]="arg1"
pass_arg[2]="arg2"
subprocess.check_call(pass_arg)
上面實施例提供的arg1 arg2的和作爲參數的外殼腳本test.sh
實質上,子期望的陣列。所以你可以填充一個數組並提供它作爲參數。
再舉一個例子,這是不包括在上述所有的,
subprocess.Popen([ '/你的/ script.sh%S%S%S' %(參數1,參數2,參數3)] ,shell = True)
請注意,當你鍵入%(參數1,參數2,參數3)時,在%和(例如%(參數1,參數2,參數3)無效之間不應該有空格
如果我所有的參數都是變量,我不把它們設置爲字符串嗎? – user2510173
@ user2510173:我不明白questi上。這裏有一個例子:'arg3 = 1',爲了轉換它,你可以調用'str(arg3)'返回''1''。 – jfs
不幸的是,代碼中的例子並沒有回答原來的問題,因爲他們選擇了一個只有一個參數的簡單例子。目前還不清楚多個參數應該作爲單個字符串傳遞還是作爲多個傳遞參數傳遞,除非您仔細閱讀了POpen背後的詳細信息。即使這樣,它只會說「提供一系列參數通常是首選」 - 不是,「你必須提供多個參數作爲列表」 –