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命令足够简单固定化

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