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沒有能夠啟動。
輸出結果:
圖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)
加引号後的輸出結果如下圖:
圖2 圖1和圖2差別在于最後最後一行,每個參數都用雙引号包起來了。
如果輸入cmd指令時,沒有對包含空格的參數加雙引号,那麼參數解析就會在空格出截斷導緻解析出錯:
圖3 圖3中,參數D:\case 2沒有用雙引号包起來,被解析成了兩個參數:D:\case和2.