解决python中os.system调用exe文件的问题
解决python中os.system调⽤exe⽂件的问题
前⼀段时间导师叫我写⼀个批处理的⼩程序,就是循环修改辐射传输模型软件MODTRAN的输⼊参数,然后运⾏MODTRAN 软件进⾏计算,输出
需要的结果。我这⾥⽤的是python写的⼩程序,那就需要考虑⽤python调⽤MODTRAN的exe⽂件运⾏,查了⼀些资料可以⽤os.system命令来
下一轮油价调整日期
执⾏exe⽂件,说起来直接调⽤就⾏了嘛,对吧,但是说起来简单,还是会遇到⼀些莫名其妙的问题,下⾯我来说说我遇到的问题。
先给⼤家介绍⼀下MODTRAN这个软件运⾏的⼀个过程。停牌是什么意思
这个软件⾥的东西如下图所⽰:
简单点说就是修改tape5⾥⾯的参数,然后运⾏⽂件⽣成tape6⽂件,需要的数据就存在tape6⽂件⾥。
所以呢,修改tape5参数的程序写好了额,剩下的就是调⽤运⾏,下⾯的代码就是我测试os.system()的python代码:
import os  #导⼊os模块
os.system('')  #此处已经设置好了该exe⽂件的环境变量
先解释⼀下os.system(‘command'),这个函数是⽤来执⾏windows下的cmd命令的的,其中的command就是cmd命令
运⾏结果是控制台输出⼀⾏提⽰:
File “tape5” does not exist.
特种劳动防护用品
这我就受不了了,tape5⽂件明明是存在的,⽽且还是和exe⽂件在同⼀⽬录下,怎么会不到呢,我继续在cmd窗⼝中输⼊运⾏⼀测试⼀下,是同样的结果
那问题就不是python的os.system,继续在⽹上查资料可以是⽤cmd的start命令来运⾏exe⽂件,其语法为start ["title"] [/dPath] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/b] [FileName] [parameters]
其参数的意义可以在cmd中使⽤'start/?'命令查看相关帮助如图:
参数
"title" 指定在“命令提⽰符”窗⼝标题栏中显⽰的标题。
/dpath 指定启动⽬录。
小学卫生工作总结/i 将 启动环境传送到新的“命令提⽰符”窗⼝。
/min 启动新的最⼩化窗⼝。
/max 启动新的最⼤化窗⼝。
/separate 在单独的内存空间启动 16 位程序。
/shared 在共享的内存空间启动 16 位程序。
/low 以空闲优先级启动应⽤程序。
/normal 以⼀般优先级启动应⽤程序。
/high 以⾼优先级启动应⽤程序。
/realtime 以实时优先级启动应⽤程序。
/
abovenormal 以超出常规优先级的⽅式启动应⽤程序。
/belownormal 以低出常规优先级的⽅式启动应⽤程序。
/wait 启动应⽤程序,并等待其结束。
/b 启动应⽤程序时不必打开新的“命令提⽰符”窗⼝。除⾮应⽤程序启⽤ CTRL+C,否则将忽略 CTRL+C 操作。使⽤
CTRL+BREAK 中断应⽤程序。
⾮执⾏⽂件只要将⽂件名作为命令键⼊,即可通过其⽂件关联运⾏该⽂件。有关使⽤ assoc 和 ftype 在命令脚本中创建。
在运⾏的命令的第⼀个标记为“CMD”字符串但不包括扩展名或路径限定符时,“CMD”将被 COMSPEC 变量的值取代。这样可以防⽌⽤户从当前⽬录选取 cmd。
当您运⾏ 32 位图形⽤户界⾯ (GUI) 应⽤程序时,cmd 不会在返回到命令提⽰符之前等待应⽤程序退出。如果从命令脚本运⾏应⽤程序,则不会发⽣这种新情况。
在运⾏的命令中第⼀个符号不包括扩展名的情况下, 使⽤ PATHEXT 环境变量的值确定要查的扩展名以及查顺序。
四芯线PATHEXT 变量的默认值为:COM;.EXE;.BAT;.CMD(语法与 PATH 变量相同,使⽤分号分开不同元素)。当您搜索可执⾏⽂件且在任何扩展名上都没有匹配项时,start 将搜索⽬录名。
我没有细看参数就直接在cmd中使⽤命令:start "" "⽂件路径及⽂件名"(start后⾯的两个双引号之间是空的意思是运⾏exe⽂件打开的新的命令⾏窗⼝的title为空,如果不设置的话,它会把后⾯的⽂件路径及⽂件名当title),运⾏该命令后看见⼀个cmd 窗⼝闪了⼀下好像是运⾏了,但是检查⼀下tape6⽂件⾥⾯的数据并没有发⽣变化,所以,exe⽂件并没有运⾏成功。
继续看相应的参数并查资料发现,在执⾏命令时要加⼊“/dpath”参数,设置启动⽬录,不然不着tape5⽂件,修改后的cmd命令为:start "" /d"⽂件所在⽬录" "exe⽂件名",回车发现运⾏成功。
但是放在python中批处理就遇到另⼀个问题了。
在⼀个循环中,每次执⾏⼀次exe⽂件输出⼀次tape6,并提取⼀次数据,但是每次exe程序还没来得及执⾏完,后⾯的python代码就执⾏了,使得提取不到tape6中的数据,继续看start的参数看看能不能解决问题。
脸长的女生适合什么发型
参数中有⼀个/wait,它的作⽤是启动应⽤程序并等待其结束,所以我修改python代码为os.system('start "" /d "⽂件所在⽬录" /wait "exe⽂件名")
程序成功执⾏,并顺利提取到了tape6中的数据
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。