您现在的位置是:首页 > 技术教程 正文

python 调用可执行文件.exe

admin 阅读: 2024-03-22
后台-插件-广告管理-内容页头部广告(手机)

方式一: os.system(cmd_command)

os.system() 相当于打开了windows系统中的一个cmd窗口,cmd_command 相当于在命令行中输入的命令。 cmd_command 可以是一个单独的exe文件的路径,这时表示打开一个exe程序,比如下面例子,表示用python打开一个notepad++软件。

  1. import os
  2. def cmd_run_exe(exe_path):
  3. """
  4. 功能:打开一个exe程序
  5. 参数: exe_path:exe程序的全局路径,
  6. 注意:需要输入的是exe的全局路径,路径中不能有空格,也不能仅仅是exe软件名
  7. """
  8. os.system(exe_path)
  9. def cmd_kill_exe(exe_name):
  10. """
  11. 功能:关闭一个已经打开的exe软件程序
  12. 参数:
  13. exe_name:已经打开的exe程序的名称,是名称,不能是路径
  14. """
  15. os.system("taskkill /f /t /im {}".format(exe_name))
  16. print("killed process {}".format(exe_name))
  17. if __name__ == "__main__":
  18. exe_path = "E:/software-setups/notepad++/notepad++.exe"
  19. # 打开nodepad++软件
  20. cmd_run_exe(exe_path)

cmd_command 也可以是一个命令行,示例如下:

        创建一个hello.py文件

  1. ## hello.py
  2. print("hello world!")

        创建一个main.py文件

  1. ## main.py
  2. import os
  3. def run_cmd_command(cmd_command):
  4. os.system(cmd_command)
  5. if __name__ == "__main__":
  6. python_exe_path = "python.exe"
  7. py_file_path = "hello.py"
  8. cmd_command = "{} {}".format(python_exe_pyth, py_file_path)
  9. run_cmd_command(cmd_command)

        运行上面的main.py脚本,就相当于在cmd的命令行中运行“python.exe hello.py”

方式二:subprocess 方法

subprocess存在的目的就是为了替代上面的os.system(),它集成了很多功能,用起来很方便。

  1. import subprocess
  2. def python_run_exeCommand(cmd_exe_command,waitTime=10000):
  3. """
  4. 功能:打开一个exe软件,等待waitTime秒,关闭该程序。
  5. 参数:
  6. cmd_exe_command: 待打开的exe软件路径及命令.
  7. 可以是完整的命令字符串,也可以是字符串列表。
  8. 路径中不能存在空格,最好不要有汉字。不能仅仅是软件名。
  9. waitTime: 最大等待时长,单位:秒。
  10. 超过该时长后,关闭exe程序。
  11. """
  12. Popen_Obj = subprocess.Popen(cmd_exe_command)
  13. try:
  14. Popen_Obj.wait(timeout=waitTime)
  15. except Exception as e:
  16. print("===== process timeout {} =====".format(cmd_exe_command))
  17. Popen_Obj.kill()
  18. return None
  19. if __name__ == "__main__":
  20. python_exe_path = "python.exe"
  21. py_file_path = "hello.py" ## 上一章中创建的hello.py文件。
  22. python_run_exeCommand([python_exe_path,py_file_path])

subprocess的一个典型应用是:可以向exe_command提供输入参数,也可以存储exe_command运行过程中产生的print()信息。

  1. import subprocess
  2. def python_run_exeCommand(cmd_exe_command,waitTime=10000):
  3. """
  4. 功能:打开一个exe软件,等待waitTime秒,关闭该程序。
  5. 参数:
  6. cmd_exe_command: 待打开的exe软件路径及命令.
  7. 可以是完整的命令字符串,也可以是字符串列表。
  8. 路径中不能存在空格,最好不要有汉字。不能仅仅是软件名。
  9. waitTime: 最大等待时长,单位:秒。
  10. 超过该时长后,关闭exe程序。
  11. """
  12. Popen_Obj = subprocess.Popen(cmd_exe_command,stdout = subprocess.PIPE)
  13. # cmd_stdout = Popen_Obj.stdout.read() # 返回bytes格式,如 b"hello world."
  14. # cmd_stdout = Popen_Obj.stdout.read().decode("utf-8") ## 把返回的bytes格式转换为string格式
  15. cmd_stdout = Popen_Obj.stdout.readlines()# 返回bytes格式,如 b"hello world.",如果有多行,返回一个列表。
  16. # cmd_stdout = Popen_Obj.stdout.readline()# 返回bytes格式,如 b"hello world.",如果有多行,返回第一行。
  17. ## 打印subprocess返回的信息
  18. for output in cmd_stdout:
  19. print("subprocess-output:",output.decode("utf-8"))
  20. try:
  21. Popen_Obj.wait(timeout=waitTime)
  22. except Exception as e:
  23. print("===== process timeout {} =====".format(cmd_exe_command))
  24. Popen_Obj.kill()
  25. return None
  26. if __name__ == "__main__":
  27. python_exe_path = "python.exe"
  28. py_file_path = "hello.py"
  29. python_run_exeCommand([python_exe_path,py_file_path])

备注:上面用到的是subprocess的高级用法Popen,一般来说使用subprocess的普通用法就够用了:subprocess.run([cmd_command_list])

  1. import subprocess
  2. python_exe_path = "python.exe"
  3. py_file_path = "D:/6-Projects/python_run_exe/hello.py"
  4. cmd_command = "{} {}".format(exe_path,py_path)
  5. res = subprocess.run([python_exe_path,py_file_path],stdout=subprocess.PIPE)
  6. stdout = res.stdout.decode("utf-8")
  7. out_list = stdout.split("\r\n")
  8. print(out_list)

subprocess很强大,更多功能参考:

subprocess — Subprocess management — Python 3.11.5 documentation

【Python】python之subprocess模块详解_python_伐尘-华为云开发者联盟

6个例子快速学会python中subprocess库的使用_Light2077的博客-CSDN博客

python subprocess-更优雅的创建子进程 - 知乎

python中3种调用可执行文件.exe的方法_python 打开本地exe文件_Ethan的博客的博客-CSDN博客

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索