Python中os.system()命令調用的侷限(坑)

參考文章
os.system將通過將路徑用引號括起來,啓動一個在路徑中有空格的二進制文件。(如果您習慣於使用終端,這應該是一個非常明顯的解決方案。) 但是,這本身並不能解決這個函數中更痛苦的問題…一旦你這樣做了,你就可能會遇到向你的命令添加參數的麻煩!

目前所有的建議都是現在使用subprocess模塊,os.system(cmd)方式,cmd中有空格會把原始命令截斷,原因可能是shell直接調用了命令解析器的原因吧。比如下例子:

os.system() 執行exe文件
原腳本:
for _ in range(15):
    os.system('Time-varying workflow.exe')
    time.sleep(1)

報錯:並沒有找到文件
原因:os.system()還是用空格把字符串給拆成了不同的部分,這樣的錯誤,也就是說其在空格處截斷了,導致了命令無法順利的執行,加雙引號以後問題消失,但是新的問題又出來了,即命令只能有一個參數,多於一個參數也執行不了。

import subprocess
cmd='"C:\Program Files\VMware\VMware Tools\rpctool.exe" "-h"'
ps = subprocess.Popen(cmd); # 執行cmd命令
ps.wait();#讓程序阻塞

這樣就完美解決了os.system空格問題和參數只能有一個的問題

解決辦法:
方案1:使用subprocess.Popen模塊
方案2:加雙引號-- 適用於cmd命令足夠簡單固定化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章