使用Python子进程模块运行超过10个参数

问题描述:

我使用这个代码的批处理文件:使用Python子进程模块运行超过10个参数

test.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 

mybat.bat:

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

它的工作正常,直到参数:“var10”,因为我不知道为什么蝙蝠采取相同的值为%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。

谢谢!

+1

对不起以前的国旗。没有注意到这是Windows的事实。这里是一个更好的:http://stackoverflow.com/q/8328338/3901060 – FamousJameous

批处理文件仅支持%1%9。要阅读第十个参数(和下和下一个),你必须使用命令(也许更多次)

shift 

其中转移参数:

10th参数%9%9%8等:

+--------------+----+----+----+----+----+----+----+----+----+----+------+ 
| Before shift | %0 | %1 | %2 | %3 | %4 | %5 | %6 | %7 | %8 | %9 | 10th | 
+--------------+----+----+----+----+----+----+----+----+----+----+------+ 
| After shift | x | %0 | %1 | %2 | %3 | %4 | %5 | %6 | %7 | %8 | %9 | 
+--------------+----+----+----+----+----+----+----+----+----+----+------+ 

(x表示,原来%0现在无法进入,所以如果你需要它,你必须之前使用它 shift声明)。

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

因此改变你的批处理文件:

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

谢谢你的作品! – mtinetti

刚刚结束这个问题,我决定只用一个长的参数,因为这些参数可以是可选的,我无法找到一个方法来发送一个空参数给蝙蝠。换档命令的作品,但如果你有一个固定数量的参数,在我的情况下,参数的数量可以是6,8,12,可以改变,sooo,我现在使用的代码:

test.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 

mybat.bat

set go_to_path=%1 
set exe_file=%2 
set parameters=%3 

cd /d %go_to_path% 
%exe_file% "%parameters%" 

在“%参数%”的报价是丢弃自带的变量%3的那些,记住:“”逃避在批处理文件中双引号。