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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值