python調(diào)用可執(zhí)行文件.exe的2種實(shí)現(xiàn)方法
方式一: os.system(cmd_command)
os.system() 相當(dāng)于打開(kāi)了windows系統(tǒng)中的一個(gè)cmd窗口,cmd_command 相當(dāng)于在命令行中輸入的命令。 cmd_command 可以是一個(gè)單獨(dú)的exe文件的路徑,這時(shí)表示打開(kāi)一個(gè)exe程序,比如下面例子,表示用python打開(kāi)一個(gè)notepad++軟件。
import os def cmd_run_exe(exe_path): """ 功能:打開(kāi)一個(gè)exe程序 參數(shù): exe_path:exe程序的全局路徑, 注意:需要輸入的是exe的全局路徑,路徑中不能有空格,也不能僅僅是exe軟件名 """ os.system(exe_path) def cmd_kill_exe(exe_name): """ 功能:關(guān)閉一個(gè)已經(jīng)打開(kāi)的exe軟件程序 參數(shù): exe_name:已經(jīng)打開(kāi)的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" # 打開(kāi)nodepad++軟件 cmd_run_exe(exe_path)
cmd_command 也可以是一個(gè)命令行,示例如下:
創(chuàng)建一個(gè)hello.py文件
## hello.py print("hello world!")
創(chuàng)建一個(gè)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)
運(yùn)行上面的main.py腳本,就相當(dāng)于在cmd的命令行中運(yùn)行“python.exe hello.py”
方式二:subprocess 方法
subprocess存在的目的就是為了替代上面的os.system(),它集成了很多功能,用起來(lái)很方便。
import subprocess def python_run_exeCommand(cmd_exe_command,waitTime=10000): """ 功能:打開(kāi)一個(gè)exe軟件,等待waitTime秒,關(guān)閉該程序。 參數(shù): cmd_exe_command: 待打開(kāi)的exe軟件路徑及命令. 可以是完整的命令字符串,也可以是字符串列表。 路徑中不能存在空格,最好不要有漢字。不能僅僅是軟件名。 waitTime: 最大等待時(shí)長(zhǎng),單位:秒。 超過(guò)該時(shí)長(zhǎng)后,關(guān)閉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" ## 上一章中創(chuàng)建的hello.py文件。 python_run_exeCommand([python_exe_path,py_file_path])
subprocess的一個(gè)典型應(yīng)用是:可以向exe_command提供輸入?yún)?shù),也可以存儲(chǔ)exe_command運(yùn)行過(guò)程中產(chǎn)生的print()信息。
import subprocess def python_run_exeCommand(cmd_exe_command,waitTime=10000): """ 功能:打開(kāi)一個(gè)exe軟件,等待waitTime秒,關(guān)閉該程序。 參數(shù): cmd_exe_command: 待打開(kāi)的exe軟件路徑及命令. 可以是完整的命令字符串,也可以是字符串列表。 路徑中不能存在空格,最好不要有漢字。不能僅僅是軟件名。 waitTime: 最大等待時(shí)長(zhǎng),單位:秒。 超過(guò)該時(shí)長(zhǎng)后,關(guān)閉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格式轉(zhuǎn)換為string格式 cmd_stdout = Popen_Obj.stdout.readlines()# 返回bytes格式,如 b"hello world.",如果有多行,返回一個(gè)列表。 # 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的高級(jí)用法Popen,一般來(lái)說(shuō)使用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很強(qiáng)大,更多功能參考:
subprocess — Subprocess management — Python 3.11.5 documentation
【Python】python之subprocess模塊詳解_python_伐塵-華為云開(kāi)發(fā)者聯(lián)盟
6個(gè)例子快速學(xué)會(huì)python中subprocess庫(kù)的使用_Light2077的博客-CSDN博客
python subprocess-更優(yōu)雅的創(chuàng)建子進(jìn)程 - 知乎
python中3種調(diào)用可執(zhí)行文件.exe的方法_python 打開(kāi)本地exe文件_Ethan的博客的博客-CSDN博客
到此這篇關(guān)于python調(diào)用可執(zhí)行文件.exe的2種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)python調(diào)用可執(zhí)行文件.exe內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)淘寶購(gòu)物系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)易的淘寶購(gòu)物系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10Python應(yīng)用利器之緩存機(jī)制的妙用詳解
在 Python 應(yīng)用程序中,使用緩存能夠顯著提高性能并降低資源消耗,本文將詳細(xì)介紹如何在 Python 中實(shí)現(xiàn)緩存機(jī)制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12使用PyQt實(shí)現(xiàn)簡(jiǎn)易文本編輯器
這篇文章主要為大家詳細(xì)介紹了如何使用PyQt5框架構(gòu)建一個(gè)簡(jiǎn)單的文本編輯器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02通過(guò)python3實(shí)現(xiàn)投票功能代碼實(shí)例
這篇文章主要介紹了通過(guò)python3實(shí)現(xiàn)投票功能代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09分析python并發(fā)網(wǎng)絡(luò)通信模型
隨著互聯(lián)網(wǎng)和物聯(lián)網(wǎng)的高速發(fā)展,使用網(wǎng)絡(luò)的人數(shù)和電子設(shè)備的數(shù)量急劇增長(zhǎng),其也對(duì)互聯(lián)網(wǎng)后臺(tái)服務(wù)程序提出了更高的性能和并發(fā)要求。本文主要分析比較了一些模型的優(yōu)缺點(diǎn),并且用python來(lái)實(shí)現(xiàn)2021-06-06使用Python連接MySQL數(shù)據(jù)庫(kù)進(jìn)行編程的步驟詳解
Python數(shù)據(jù)庫(kù)編程可以使用多種模塊與API,例如SQLite、MySQL、PostgreSQL等,本教程將重點(diǎn)介紹使用Python連接MySQL數(shù)據(jù)庫(kù)進(jìn)行編程,需要的朋友可以參考下2023-06-06pandas與pyspark計(jì)算效率對(duì)比分析
這篇文章主要介紹了pandas與pyspark計(jì)算效率對(duì)比,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06django應(yīng)用JWT(JSON?Web?Token)實(shí)戰(zhàn)教程
在前后端分離的項(xiàng)目中,JWT(JSON?Web?Token)作為一種廣泛使用的身份驗(yàn)證和授權(quán)機(jī)制,提供了一種安全、高效的方式來(lái)保護(hù)RESTful?API,本文詳細(xì)介紹了JWT的概念、優(yōu)勢(shì)、在Django中的應(yīng)用步驟和使用方法,是構(gòu)建安全、高效Web應(yīng)用的有效指南2024-10-10Python實(shí)現(xiàn)計(jì)算AUC的示例代碼
AUC(Area?under?curve)是機(jī)器學(xué)習(xí)常用的二分類評(píng)測(cè)手段,直接含義是ROC曲線下的面積。本文將利用Python語(yǔ)言實(shí)現(xiàn)計(jì)算AUC,感興趣的可以學(xué)習(xí)一下2022-07-07