Windows Python批处理过程参数替换问题

Windows Python批处理过程参数替换问题,windows,python-3.x,batch-file,subprocess,Windows,Python 3.x,Batch File,Subprocess,我有一个单行命令,可以在CMD中运行,用一些参数填充程序。该命令包含以下命令: FOR /L %I in (16,1,20) DO "C:\Path\To\Program\program_executable.exe" --do-things="C:\Path\this.item|C:\Path\that%I.item|Text%I" 问题是我试图在Python3.X中实现同样的功能,但我无法正确地传递参数信息(-do things=“C:\Path\this.item | C:\Path\t

我有一个单行命令,可以在CMD中运行,用一些参数填充程序。该命令包含以下命令:

FOR /L %I in (16,1,20) DO "C:\Path\To\Program\program_executable.exe" --do-things="C:\Path\this.item|C:\Path\that%I.item|Text%I"
问题是我试图在Python3.X中实现同样的功能,但我无法正确地传递参数信息(-do things=“C:\Path\this.item | C:\Path\that%I.item | Text%I”)。我试过使用
subprocess.Popen
system.call
,并同时使用可执行文件+参数列表和所有行的字符串:

['C:\\Path\\To\\Program\\program_executable.exe', '--do-things="C:\\Path\\this.item|C:\\Path\\that16.item|Text16"]

我唯一能做的就是启动程序(正如它调用命令一样),但它似乎没有向它传递参数。我认为问题在于args需要内部的“”,Python似乎无法正确地发送它们,尽管为了以防万一,我尝试过将其转义

它应该启动的CMD命令应该是这样的:

C:\>"C:\Path\To\Program\program_executable.exe" --do-things="C:\Path\this.item|C:\Path\that20.item|Text20"

知道如何从Python3.X实现这一点吗?

因为您不会使用shell,所以双引号仅用于在命令行参数有空格时帮助子进程创建
argv
数组
subprocess.Popen
call
函数是调用
Popen
的方便包装器)通过调用
list2cmdline
)形成命令行,在需要时添加引用。请为范围(16,21)中的i尝试
:subprocess.call([r'C:\Path\To\Program\Program\u executable.exe',r'--do things=C:\Path\this.item | C:\Path\that%d.item | Text%d'%i])
。感谢您的回复。程序实际上并不喜欢args,因为它只启动,但不使用参数执行任何操作——执行我们添加到可执行文件中的操作。不幸的是,
list2cmdline
不是一个确定的赌注,因为Windows程序是用命令行字符串启动的。它假定程序遵循Microsoft的规则来解析命令行中的空格、引号和转义。如果您有一个遵循自己规则的程序,则需要手动生成命令行。尝试:
对于范围(16,21)中的i:subprocess.call(r'C:\Path\To\Program\Program\u executable.exe--do things=“C:\Path\this.item | C:\Path\that%d.item | Text%d”'%i)
C:\>"C:\Path\To\Program\program_executable.exe" --do-things="C:\Path\this.item|C:\Path\that20.item|Text20"