VF1*_*VF1 7 python shell escaping shlex
是否可以从调用的程序本身修补python程序的copy-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
Run Code Online (Sandbox Code Playgroud)
当然,如果我们复制后者,我们将获得不同的调用.用引号括起每个参数也不起作用.考虑dummy2.py:
import sys
print(sys.argv)
print(' '.join('"{}"'.format(s) for s in sys.argv))
Run Code Online (Sandbox Code Playgroud)
这将打破:
python dummy2.py ' " breaking " '
Run Code Online (Sandbox Code Playgroud)
用途shlex.quote:
import sys
from shlex import quote
print(' '.join(quote(s) for s in sys.argv))
Run Code Online (Sandbox Code Playgroud)
在shell中:
python space_in_argv.py "aa bb" ' " breaking " '
Run Code Online (Sandbox Code Playgroud)
收益率:
space_in_argv.py 'aa bb' ' " breaking " '
Run Code Online (Sandbox Code Playgroud)
您可能还想要包含sys.executable,请参阅文档中的更多详细信息.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |