【问题标题】:Re-creating a python invocation重新创建 python 调用
【发布时间】:2018-05-19 22:39:05
【问题描述】:

是否可以从被调用的程序本身对 python 程序的复制和粘贴调用进行修补?它不必是完全相同的调用字符串,但参数应该解析为相同的东西。

请注意,很遗憾,' '.join(sys.argv) 不会删除它。这种方法的主要问题是它不能正确引用参数。考虑dummy.pyimport sys; print(sys.argv); print(' '.join(sys.argv))

运行python dummy.py "1 2" 打印:

['dummy.py', '1 2']
dummy.py 1 2

当然,如果我们复制后者,我们会得到不同的调用。将每个参数用引号括起来也不起作用。考虑dummy2.py

import sys
print(sys.argv)
print(' '.join('"{}"'.format(s) for s in sys.argv))

这将中断:

python dummy2.py ' " breaking " '

【问题讨论】:

    标签: python shell escaping shlex


    【解决方案1】:

    使用shlex.quote:

    import sys
    from shlex import quote
    
    print(' '.join(quote(s) for s in sys.argv))
    

    在外壳中:

    python space_in_argv.py "aa bb" ' " breaking " '
    

    产量:

    space_in_argv.py 'aa bb' ' " breaking " '
    

    您可能还想包含sys.executable,请参阅more detail in the doc

    【讨论】:

    • 整洁!这正是我一直在寻找的
    • @VF1 我可以知道你的意图是什么吗?
    • 我正在使用 python 脚本运行实验,通过命令行指定参数。这对于快速重新创建实验很有用(通过从日志文件中复制)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2016-06-04
    • 2015-02-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    相关资源
    最近更新 更多