在Windows上,通过传递字符串参数列表进行子进程调用,然后将其重新格式化为单个字符串以调用相关命令。它通过一系列规则来实现这一点,如文档这里中的大纲。
在Windows上,args序列被转换为可以使用以下规则(对应于MS C运行时使用的规则)解析的字符串:
然而,在实践中,这可能是很难做到的,因为不清楚字符串究竟是如何解释的。在弄清楚如何正确设置命令的格式时,可能会有尝试和错误。
是否有一种方法,我可以确定什么字符串子进程将制定?这样,我就可以检查它并确保它的格式是正确的,并且比记录命令的列表形式更好地记录它。
发布于 2016-08-22 14:46:59
我深入研究了实际的子流程模块,并在其中找到了一个答案。有一个名为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'https://stackoverflow.com/questions/39081535
复制相似问题