记录subprocess.Popen调用

时间:2012-07-12 19:14:27

标签: python logging python-3.x subprocess

我想记录对subprocess.Popen的所有调用,这样我就可以创建一个等效的批处理/ shell文件。

python如何将参数列表转换为命令?

是否等同于' '.join([args])

例如:

args=['ls', '-A']
subprocess.Popen(args)
# ...

我希望获得所有调用的等效文件:

ls -A

1 个答案:

答案 0 :(得分:1)

不,它不等同于此(因为某些参数可能包含空格或其他shell元字符)。实际上,除非你使用shell = True,否则Python根本不需要将所有参数组合成一个字符串。它使用exec *() - 类似的调用(参见man execve)并传递数组中的参数。

如果您只想输出足够的信息以便稍后重新创建参数列表,那么您可能只想输出repr(args)

由于您的目标是创建等效的批处理/ shell文件,因此您可能需要采取特殊步骤来引用参数,以便其中的任何特殊元字符不会影响shell如何拆分参数。一种方法是通过一个函数传递每个参数,就像我在https://gist.github.com/790722提出的那样(尽管它不知道如何对批处理文件进行安全引用)。