重新创建python调用

时间:2017-12-06 05:55:32

标签: python shell escaping shlex

是否可以从调用的程序本身为python程序修补一个co​​py-and-pastable调用?它不必是完全相同的调用字符串,但参数应该解析为同一个东西。

请注意,' '.join(sys.argv)不幸的是,它不会被删除。我对这种方法的主要问题是它不能正确引用参数。考虑使用dummy.py

import 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 " '

1 个答案:

答案 0 :(得分:6)

使用shlex.quote

import sys
from shlex import quote

print(' '.join(quote(s) for s in sys.argv))
shell中的

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

的产率:

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

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