天天看點

cmd執行python腳本:指令參數有空格

1.cmd指令中參數包含空格

關于cmd中執行指令路徑包含空格的解決辦法,最簡單的方法是對有空格的參數加雙引号。

例子:

沒有空格的指令

python D:\ACEM\script\python\main.py  D:\case FCBGA_test3A.D3D FCBGA_test3A.T3T 
           

參數有空格之後,必須用雙引号把參數包起來,表示一個整體,否則會被截斷

python "D:\ACEM data\script\python\main.py"  "D:\case 2" "FCBGA_test3A  1.D3D" "FCBGA_test3A  1.T3T" 
           

注意:

沒有空格也可以用雙引号把每個參數包起來

2.Python在通過os.system執行含有空格路徑的指令

2.1os.system原理

system函數可以将字元串轉化成指令在伺服器上運作;其原理是每一條system函數執行時,其會建立一個子程序在系統上執行指令行,子程序的執行結果無法影響主程序;

本質:

效果等同于在cmd中輸入一個指令

是以,參考1.cmd指令中參數包含空格,可以個system()函數的參數加雙引号,但是python代碼中system函數的參數往往是一個變量。

env_dist = os.environ
acem = env_dist["ACEM_HOME"]
au3 = acem+"\\script\\autoit\\paraview.au3"
cmd = '"%s"'%(au3)       
os.system(cmd)
           

上面代碼中:

acem中包含空格:D:\ACEM data

是以需要對au3參數加雙引号。

cmd = '"%s"'%(au3)   
           

cmd就是對參數au3加雙引号

2.2相關文檔:

os.system路徑存中有空格

在Python中向變量添加單引号

Python在通過os.system執行含有空格路徑的指令時報錯問題的解決方案

3.Python在通過win32api.ShellExecute運作程式執行含有空格參數的指令

win32api.ShellExecute(0, 'open', convertPVD, param, '', 1)
           

其中,convertPVD是要啟動的程式;

param是傳送給convertPVD的參數

convertPVD需要輸入convertPVD的絕對路徑,如果convertPVD的絕對路徑包含空格,ShellExecute()函數可以正确處理;

但是param中的多個參數如果包含空格,需要對每個參數分别加雙引号包起來表示一個整體。

沒有加雙引号的代碼:

acem = "D:\ACEM data"
convertPVD = acem + "\\bin\\convertPVD.exe"
print("argv1:{0}".format(sys.argv[1]))
print("argv2:{0}".format(sys.argv[2]))
print("argv3:{0}".format(sys.argv[3]))
param = sys.argv[1]
param = param + " "+ sys.argv[2]+" "+sys.argv[3]
print(param)
win32api.ShellExecute(0, 'open', convertPVD, param, '', 1)
           

cmd中輸入指令:

python "aa.py"  "D:\case 2" "FCBGA_test3A  1.D3D" "FCBGA_test3A  1.T3T"
           

convertPVD.exe沒有能夠啟動。

輸出結果:

cmd執行python腳本:指令參數有空格

圖1 修改代碼如下,convert按照預期啟動。

acem = "D:\ACEM data"
convertPVD = acem + "\\bin\\convertPVD.exe"
print("argv1:{0}".format(sys.argv[1]))
print("argv2:{0}".format(sys.argv[2]))
print("argv3:{0}".format(sys.argv[3]))
param = sys.argv[1]
param ='"%s"' % (param) + " " + '"%s"' % (sys.argv[2]) + " " + '"%s"' % (sys.argv[3])
print(param)
win32api.ShellExecute(0, 'open', convertPVD, param, '', 1)
           

加引号後的輸出結果如下圖:

cmd執行python腳本:指令參數有空格

圖2 圖1和圖2差別在于最後最後一行,每個參數都用雙引号包起來了。

如果輸入cmd指令時,沒有對包含空格的參數加雙引号,那麼參數解析就會在空格出截斷導緻解析出錯:

cmd執行python腳本:指令參數有空格

圖3 圖3中,參數D:\case 2沒有用雙引号包起來,被解析成了兩個參數:D:\case和2.