是否可以从调用程序本身中为Python程序进行修补复制和完整的调用?它不一定是完全相同的调用字符串,但是参数应分析为同一件事。
不幸的是,' '.join(sys.argv)
不会切割它。我在这种方法中遇到的主要问题是它无法正确引用论点。考虑使用dummy.py
运行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 " '
使用 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
,请参阅文档中的更多详细信息。