2012-11-29 54 views
1

我試圖執行下面的代碼行:問題使用python子/ SH作爲一個bash包裝

subprocess.call(["java", "-cp", "/home/me/somepath/file.jar", ..., "-someflag somevalue"]) 

代碼失敗,我試圖運行jar給我的使用信息。但是,如果我將字符串展開並粘貼到終端中,它可以正常工作(我知道我正確地擴展了字符串,因爲sh模塊在錯誤輸出時將它吐出來)。所以這是子進程或sh運行的問題。

下面是你應該如何使用它的一個例子:

subprocess.call(["ls", "-l"]) 

這裏的描述:

subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False) 

ARGS所需的所有來電,應該是一個字符串,或程序參數的序列 。提供參數序列通常首選爲 ,因爲它允許模塊處理任何所需的參數轉義和引用(例如允許文件名稱中的空格) 。如果傳遞單個字符串,則任何一個shell都必須爲True(請參見下面的 ),否則字符串必須簡單地命名要執行的程序 而不指定任何參數。

http://docs.python.org/2/library/subprocess.html

這我不清楚我是否應該與在不同的地方標誌和值列表中分手的字符串。

+0

你得到什麼錯誤? – Blender

+0

我正在從正確的方式來指定參數從程序的幫助。 – anonymous

+0

把''-someflag somevalue''分成''-someflag','somevalue''看看是否有幫助。 – Blender

回答

3
subprocess.call(["java", "-cp", "/home/me/somepath/file.jar", ..., "-someflag", "somevalue"]) 

您的原始代碼對應

java -cp /home/me/somepath/file.jar ... "-someflag somevalue" 

的外殼。

0

撥動shell標誌設置爲true

subprocess.check_call(["java", "-cp", cp_arg, ..., "-someflag somevalue"], shell=True)

也,小費,你可以使用split()功能分裂出一個字符串命令:

subprocess.check_call("java -cp blah blah".split(), shell=True)

+2

如果你使用'shell = True',我認爲你不需要分割命令。 – Blender