7

是否可以从被调用的程序本身修补一个 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 " '
4

1 回答 1

6

使用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,请参阅文档中的更多详细信息

于 2017-12-06T06:07:17.290 回答