【问题标题】:Logging subprocess.Popen calls记录 subprocess.Popen 调用
【发布时间】:2012-07-12 15:01:43
【问题描述】:

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

python如何将参数列表变成命令?

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

例如:

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

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

ls -A

【问题讨论】:

    标签: python logging python-3.x subprocess


    【解决方案1】:

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

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

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

    【讨论】:

    • 原来批处理文件相差甚远(甚至不支持../blah.exe相对路径类型命令)。不过,您肯定已经在这里回答了我的问题。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2010-09-11
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多