【问题标题】:problems using python subprocess/sh as a bash wrapper使用 python subprocess/sh 作为 bash 包装器的问题
【发布时间】:2012-11-29 03:12:08
【问题描述】:

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

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

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

【问题讨论】:

  • 你遇到了什么错误?
  • 我正在从程序中获得有关指定参数的正确方法的帮助。
  • "-someflag somevalue" 拆分为"-someflag", "somevalue" 看看是否有帮助。

标签: python bash subprocess


【解决方案1】:
subprocess.call(["java", "-cp", "/home/me/somepath/file.jar", ..., "-someflag", "somevalue"])

你原来的代码对应

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

在外壳中。

【讨论】:

    【解决方案2】:

    shell 标志切换为真

    即,

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

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

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

    【讨论】:

    • 如果你使用shell=True,我认为你不需要拆分命令。
    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    相关资源
    最近更新 更多