python调用可执行文件.exe的2种实现方法

 更新时间:2023年08月28日 16:02:19   作者:wzg2016  
Python是一种流行的编程语言,可以轻松地通过脚本调用各种应用程序,本文就详细的介绍了python调用可执行文件.exe的2种实现方法,感兴趣的可以了解一下

方式一: os.system(cmd_command)

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

import os 
def cmd_run_exe(exe_path):
    """
    功能:打开一个exe程序
    参数: exe_path:exe程序的全局路径,
    注意:需要输入的是exe的全局路径,路径中不能有空格,也不能仅仅是exe软件名
    """
    os.system(exe_path) 
def cmd_kill_exe(exe_name):
    """
    功能:关闭一个已经打开的exe软件程序
    参数:
        exe_name:已经打开的exe程序的名称,是名称,不能是路径
    """
    os.system("taskkill /f /t /im {}".format(exe_name))
    print("killed process {}".format(exe_name))
if __name__ == "__main__":
    exe_path = "E:/software-setups/notepad++/notepad++.exe"
    # 打开nodepad++软件
    cmd_run_exe(exe_path)
    

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

创建一个hello.py文件

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

创建一个main.py文件

## main.py 
import os 
def run_cmd_command(cmd_command):
    os.system(cmd_command)
if __name__ == "__main__":
    python_exe_path = "python.exe"
    py_file_path = "hello.py"
    cmd_command = "{} {}".format(python_exe_pyth, py_file_path)
    run_cmd_command(cmd_command)

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

方式二:subprocess 方法

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

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

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

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

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

import subprocess
python_exe_path = "python.exe"
py_file_path = "D:/6-Projects/python_run_exe/hello.py"
cmd_command = "{} {}".format(exe_path,py_path)
res = subprocess.run([python_exe_path,py_file_path],stdout=subprocess.PIPE)
stdout =  res.stdout.decode("utf-8")
out_list = stdout.split("\r\n")
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博客

到此这篇关于python调用可执行文件.exe的2种实现方法的文章就介绍到这了,更多相关python调用可执行文件.exe内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Python如何生成词云的方法

    详解Python如何生成词云的方法

    这篇文章主要介绍了详解Python如何生成词云的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 高性能web服务器框架Tornado简单实现restful接口及开发实例

    高性能web服务器框架Tornado简单实现restful接口及开发实例

    Tornado和现在的主流Web服务器框架(包括大多数Python的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado每秒可以处理数以千计的连接,这意味着对于实时Web服务来说,Tornado是一个理想的Web框架。
    2014-07-07
  • Matplotlib使用Cursor实现UI定位的示例代码

    Matplotlib使用Cursor实现UI定位的示例代码

    这篇文章主要介绍了Matplotlib使用Cursor实现UI定位的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Python使用Py2neo创建Neo4j的节点和关系

    Python使用Py2neo创建Neo4j的节点和关系

    Neo4j是一款开源图数据库,使用Python语言访问Neo4j可以使用Py2neo。本文介绍了使用Py2neo访问Neo4j,批量创建节点和关系的方法
    2021-08-08
  • 浅析Python中的随机采样和概率分布

    浅析Python中的随机采样和概率分布

    Python中包含了很多概率算法,包括基础的随机采样以及许多经典的概率分布生成。本文主要介绍了我们在机器学习中常用的概率函数。感兴趣的同学可以了解一下
    2021-12-12
  • 浅谈一下四则运算和二叉树

    浅谈一下四则运算和二叉树

    这篇文章主要浅谈一下四则运算和二叉树,因为总是见到把 四则运算表达式 用 树 的形式来展示,所以就想着给定一颗表达式树,计算它的结果出来,需要的朋友可以参考下
    2023-04-04
  • Python 数字转化成列表详情

    Python 数字转化成列表详情

    这篇文章主要介绍了Python 数字转化成列表,主要以代码实现了将输入的数字转化成一个列表,输入数字中的每一位按照从左到右的顺序成为列表中的一项。,需要的朋友可以参考下
    2021-11-11
  • Python中实现传递未知数量的函数参数

    Python中实现传递未知数量的函数参数

    这篇文章主要介绍了Python中实现传递未知数量的函数参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python DataFrame设置/更改列表字段/元素类型的方法

    Python DataFrame设置/更改列表字段/元素类型的方法

    今天小编就为大家分享一篇Python DataFrame设置/更改列表字段/元素类型的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python 编程语言详细介绍

    Python 编程语言详细介绍

    这篇文章主要分享的是 Python 编程语言的详细介绍,Python 由 Guido van Rossum 设计,作为“ABC”编程语言的继承者,于 1991 年首次发布。它是一种高级通用语言,其设计理念是通过使用缩进来强调代码的可读性。文章具有一定的参考价值,需要的朋友可以参考一下
    2021-11-11

最新评论