2012-07-12 181 views
1

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

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

是否相当于' '.join([args])

例如:

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

我希望得到同等文件,所有的呼叫:

ls -A 

回答

1

不,这并不等于说(因为某些观点可能有空间或其中的其他shell元字符)。实际上,除非使用shell = True,否则Python不需要将所有参数合并为一个字符串。它使用类似exec *()的调用(请参阅man execve)并将参数传递给数组。

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

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

+0

原来,一个批处理文件是不相同的(甚至不支持'../ blah.exe'相对路径类型命令)。虽然你肯定在这里回答了我的问题。 :) – Darthfett 2012-07-12 20:00:52

+0

是的,批处理语法糟透了:) – 2012-07-12 20:40:14