Sup*_*Man 3 python windows subprocess
在 Windows 上,您可以通过传递字符串参数列表来进行子进程调用,然后将这些参数重新格式化为单个字符串以调用相关命令。它通过一系列的规则,如文档中轮廓做到这一点在这里。
在 Windows 上,args 序列被转换为可以使用以下规则(对应于 MS C 运行时使用的规则)解析的字符串:
- 参数由空格分隔,空格或制表符。
- 被双引号包围的字符串被解释为单个参数,而不管其中包含的空格。带引号的字符串可以嵌入到参数中。
- 以反斜杠开头的双引号被解释为文字双引号。
- 反斜杠按字面解释,除非它们紧跟在双引号之前。
- 如果反斜杠紧跟在双引号之前,则每一对反斜杠都被解释为文字反斜杠。如果反斜杠的数量是奇数,则最后一个反斜杠按照规则中的描述转义下一个双引号
然而,在实践中,这很难做到正确,因为不清楚字符串是如何被解释的。在弄清楚如何正确格式化命令时可能会反复试验。
有没有办法可以确定将制定什么字符串子流程?这样我就可以检查它并确保它被正确地制定以及记录它比仅仅记录命令的列表形式更好。
我深入研究了实际的子流程模块,实际上在那里找到了答案。有一个名为的函数list2cmdline,用于将传递给的列表Popen转换为单个命令行参数字符串。只需使用列表调用它即可获得我需要的结果:
import subprocess
name = "Monty Python's Flying Circus"
path = r"C:\path\to\files"
subprocess.list2cmdline(["file.py", name, path])
# 'file.py "Monty Python\'s Flying Circus" C:\\path\\to\\files'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |