【问题标题】:Is there any way to get the full command line that's executed when using subprocess.call?有没有办法获得使用 subprocess.call 时执行的完整命令行?
【发布时间】:2015-07-20 23:50:00
【问题描述】:

我使用的是 subprocess.call,你只需给它一个参数数组,它就会构建命令行并执行它。

首先,是否涉及任何转义? (例如,如果我将一个包含空格的文件的路径作为参数传递,/path/my file.txt 会被转义吗?"/path/my file.txt"

有没有什么方法可以在执行之前获得这个生成的命令行(在转义和所有之后)?

因为我需要检查生成的命令行是否不超过一定数量的字符(以确保它在执行时不会出错)。

【问题讨论】:

  • 看起来subprocess.list2cmdline 是这样做的,你有任何人们可以测试的调用示例吗?

标签: python python-2.7


【解决方案1】:

如果您不使用shell=True,则实际上并没有涉及“命令行”。 subprocess.Popen 只是将您的参数列表传递给底层的execve() 系统调用。

同样,没有转义,因为没有涉及 shell,因此没有任何东西可以解释特殊字符,也没有任何东西会尝试标记您的字符串。

不必担心 字符 限制,因为参数永远不会连接到单个命令行中。参数的最大数量和/或单个参数的长度可能存在限制。

如果您正在使用shell=True,则必须先自己构建命令行,然后再将其传递给subprocess

【讨论】:

猜你喜欢
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多