解决python中os.system调用exe文件的问题

 更新时间:2021年05月22日 09:21:00   作者:AI学渣  
这篇文章主要介绍了解决python中os.system调用exe文件的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

前一段时间导师叫我写一个批处理的小程序,就是循环修改辐射传输模型软件MODTRAN的输入参数,然后运行MODTRAN软件进行计算,输出

需要的结果。我这里用的是python写的小程序,那就需要考虑用python调用MODTRAN的exe文件运行,查了一些资料可以用os.system命令来

执行exe文件,说起来直接调用就行了嘛,对吧,但是说起来简单,还是会遇到一些莫名其妙的问题,下面我来说说我遇到的问题。

先给大家介绍一下MODTRAN这个软件运行的一个过程。

这个软件里的东西如下图所示:

简单点说就是修改tape5里面的参数,然后运行Mod4v1r1.exe文件生成tape6文件,需要的数据就存在tape6文件里。

所以呢,修改tape5参数的程序写好了额,剩下的就是调用Mod4v1r1.exe运行,下面的代码就是我测试os.system()的python代码:

import os   #导入os模块
os.system('Mod4v1r1.exe')  #此处已经设置好了该exe文件的环境变量

先解释一下os.system(‘command'),这个函数是用来执行windows下的cmd命令的的,其中的command就是cmd命令

运行结果是控制台输出一行提示:

File “tape5” does not exist.

这我就受不了了,tape5文件明明是存在的,而且还是和exe文件在同一目录下,怎么会找不到呢,我继续在cmd窗口中输入运行一Mod4v1r1.exe测试一下,是同样的结果

那问题就不是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 将 Cmd.exe 启动环境传送到新的“命令提示符”窗口。

/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 不会在返回到命令提示符之前等待应用程序退出。如果从命令脚本运行应用程序,则不会发生这种新情况。

在运行的命令中第一个符号不包括扩展名的情况下,Cmd.exe 使用 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中的数据

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 利用Python编写一个自动化部署工具

    利用Python编写一个自动化部署工具

    这篇文章主要为大家详细介绍了如何利用Python编写一个自动化部署工具,文中的示例代码讲解详细,具有一定的学习价值,需要的可以了解一下
    2023-07-07
  • python导入其它py文件的实现步骤

    python导入其它py文件的实现步骤

    本文主要介绍了python导入其它py文件的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Python venv虚拟环境跨设备迁移的实现

    Python venv虚拟环境跨设备迁移的实现

    本文主要介绍了Python venv虚拟环境跨设备迁移的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • python基于tkinter制作m3u8视频下载工具

    python基于tkinter制作m3u8视频下载工具

    这篇文章主要介绍了python如何基于tkinter制作m3u8视频下载工具,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • Python获取DLL和EXE文件版本号的方法

    Python获取DLL和EXE文件版本号的方法

    这篇文章主要介绍了Python获取DLL和EXE文件版本号的方法,实例分析了Python获取系统文件信息的技巧,需要的朋友可以参考下
    2015-03-03
  • Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明

    俗话说“好记性不如烂笔头”,老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多捏
    2014-05-05
  • Python树的镜像的实现示例

    Python树的镜像的实现示例

    树的镜像是指将树的每个节点的左右子树交换,得到一棵新的树,本文主要介绍了Python树的镜像的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Python实现将数据写入netCDF4中的方法示例

    Python实现将数据写入netCDF4中的方法示例

    这篇文章主要介绍了Python实现将数据写入netCDF4中的方法,涉及Python数据处理与文件读写相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • 利用Python统计Jira数据并可视化

    利用Python统计Jira数据并可视化

    目前公司使用 Jira 作为项目管理工具,在每一次迭代完成后的复盘会上,我们都需要针对本次迭代的 Bug 进行数据统计,以帮助管理层能更直观的了解研发的代码质量。本篇文章将介绍如何利用统计 Jira 数据,并进行可视化,需要的可以参考一下
    2022-07-07
  • Python函数实现学员管理系统

    Python函数实现学员管理系统

    这篇文章主要为大家详细介绍了Python函数实现学员管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07

最新评论