[英]problems using python subprocess/sh as a bash wrapper
我正在嘗試執行以下代碼行:
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
我不清楚我是否應該在不同的地方用標志和值分解列表中的字符串。
subprocess.call(["java", "-cp", "/home/me/somepath/file.jar", ..., "-someflag", "somevalue"])
您的原始代碼對應於
java -cp /home/me/somepath/file.jar ... "-someflag somevalue"
在殼中。
將shell
標志切換為true
即
subprocess.check_call(["java", "-cp", cp_arg, ..., "-someflag somevalue"], shell=True)
另外,提示,您可以使用split()
函數拆分字符串命令:
subprocess.check_call("java -cp blah blah".split(), shell=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.