2017-04-19 46 views
3

我使用這個代碼的批處理文件:使用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

回答

2

批處理文件僅支持%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

1

剛剛結束這個問題,我決定只用一個長的參數,因爲這些參數可以是可選的,我無法找到一個方法來發送一個空參數給蝙蝠。換檔命令的作品,但如果你有一個固定數量的參數,在我的情況下,參數的數量可以是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的那些,記住:「」逃避在批處理文件中雙引號。

相關問題