使用Python子进程模块运行10个以上参数的批处理文件

2024-09-24 22:27:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是这个代码:

在测试.py公司名称:

cmd_line = str('C:\mybat.bat') + " "+str('C:\')+" "+str('S:\Test\myexe.exe')+" "+str('var4')+" "+str('var5')+" "+str('var6')+" "+str('var7')+ " "+str('var8') + " "+str('var9')+ " "+ str('var10')

process =  subprocess.Popen(cmd_line, stdin=PIPE, stderr=None, stdout=None, shell=True)
process.communicate()
retcode = process.returncode

在我的蝙蝠.bat公司名称:

^{pr2}$

它在参数“var10”之前工作正常,因为我不知道为什么bat对%1取相同的值,而不是对%10取相同的值,如下所示:

... >cd /d C:\ 
C:\> S:\Test\myexe.exe var4 var5 var6 var7 var8 var9 C:\0

我想读最后一个参数var10,而不是C:\0,因为bat取var1的值,只加0,但它应该是var10。在

谢谢你!在


Tags: test名称cmdline公司processexestr
2条回答

批处理文件只支持%1%9。要读取第10个参数(以及下一个参数和下一个参数),必须使用命令(可能多次)

shift

这会改变参数:

10th参数到%9%9到{},等等:

^{pr2}$

(x表示原始的%0现在不可访问,因此如果需要,必须在shift语句之前使用它

现在可以使用10th参数作为%9,第9个参数作为%8,依此类推。在

因此,请更改批处理文件:

cd /d %1
shift 
%1 %2 %3 %4 %5 %6 %7 %8 %9

为了结束这个问题,我决定只使用一个长参数,因为参数可以是可选的,而且我无法找到向bat发送空参数的方法。shift命令可以工作,但是如果你有固定数量的参数,在我的例子中,参数的数量可以是6,8,12,可以改变,那么,我现在使用的代码是:

在测试.py在

main_cmd_line = [ 'C:\mybat.bat' , 'C:\' , 'S:\Test\myexe.exe' ]
variables = var1 + ' ' + var2 + ' ' + var3
parameters_cmd_line = shlex.split( "'" + variables.strip() + "'")

cmd_line = main_cmd_line + parameters_cmd_line

process =  subprocess.Popen(cmd_line, stdin=PIPE, stderr=None, stdout=None, shell=True)
process.communicate()
retcode = process.returncode

在我的蝙蝠.bat在

^{pr2}$

“%parameters%”中的引号将丢弃变量%3附带的引号,请记住:“”以转义批处理文件中的双引号。在

相关问题 更多 >