我正在尝试执行以下代码行:
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 :(得分:3)
subprocess.call(["java", "-cp", "/home/me/somepath/file.jar", ..., "-someflag", "somevalue"])
您的原始代码对应
java -cp /home/me/somepath/file.jar ... "-someflag somevalue"
在shell中。
答案 1 :(得分: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)