我想记录对子流程的所有调用。Popen,这样我就可以创建一个等效的批处理/shell文件。
python如何将参数列表转换为命令
它等效于' '.join([args])
吗
例如:
args=['ls', '-A']
subprocess.Popen(args)
# ...
我想得到一个相当于所有调用的文件:
ls -A
不,这并不等同于此(因为有些参数中可能有空格或其他shell元字符)。事实上,除非使用shell=True,否则Python根本不需要将所有参数组合成一个字符串。它使用类似exec*()的调用(参见man-execute),并在数组中传递参数。
如果您只想输出足够的信息以便稍后重新创建参数列表,那么您可能只想输出repr(args)
。
由于您的目标是生成一个等效的批处理/shell文件,因此您可能需要采取特殊步骤来引用参数,以便其中的任何特殊元字符都不会影响shell如何拆分参数。一种方法是通过一个函数传递每个参数,就像我在https://gist.github.com/790722(尽管它不知道如何对批处理文件进行安全报价)。