1

我正在尝试执行以下代码行:

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

代码失败,我试图运行的 jar 给了我使用信息。但是,如果我展开字符串并将其粘贴到终端中,它就可以工作(我知道我正在正确展开字符串,因为 sh 模块在出错时将它吐回给我)。所以这是 subprocess 或 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

我不清楚是否应该将列表中的字符串与不同位置的标志和值分开。

4

2 回答 2

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

您的原始代码对应于

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

在外壳中。

于 2012-11-29T03:18:43.563 回答
0

shell将标志切换为真

IE,

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

另外,提示,您可以使用该split()函数拆分字符串命令:

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

于 2012-11-29T03:14:56.460 回答