【Python】运行其他程序、命令和文件

这篇具有很好参考价值的文章主要介绍了【Python】运行其他程序、命令和文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2.10 运行其他程序、命令和打开文件

有时候我们需要通过Python来运行某些程序、命令或者打开文件。这里将介绍一些常见的方法。

2.10.1 os.startfile(文件、程序)

这个函数可以直接打开一个文件或者程序,就像双击一样。非阻塞。

import os

os.startfile("C:\\Windows\\System32\\calc.exe") # 打开计算器
os.startfile("E:\\logs\\loglog.xlsx")  # 使用默认程序打开文件

2.10.2 os.system(文件、程序、命令)

使用os.system()函数可以执行一个系统命令,并返回一个退出码。正常返回0,否则返回1。命令阻塞,带路径文件或程序非阻塞。

import os

os.system("C:\\Windows\\System32\\calc.exe")  # 执行系统命令
os.system('notepad')  # 打开记事本程序
os.system('notepad 1.txt')  # 打开1.txt文件,如果不存在,则创建
exitcode = os.system('dir')  # 列出当前工作下所有文件,并返回退出码

print(exitcode)

2.10.3 os.popen(文件、命令、程序)

还有一种方法是使用os.popen()函数运行其他程序,它可以执行一个系统命令,并返回一个文件对象,可以读取或写入该对象。
例如:

import os

f = os.popen("dir")  # 执行系统命令并返回文件对象
print(f.read())  # 读取文件对象的内容
f.close()  # 关闭文件对象
f = os.popen("e:\\logs\\log.txt")  # 打开文件

2.10.4 subprocess.Popen(程序)

还有一种方法是使用subprocess模块运行其他程序,它可以创建一个子进程,并与之交互。
import subprocess
p = subprocess.Popen(“C:\Windows\System32\calc.exe”) # 创建一个子进程
p.wait() # 等待子进程结束

### 2.10.5 subprocess.run(命令)
subprocess模块的run方法可以执行命令。
cmd = 'wmic computersystem get model'
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True, check=True)
model_identifier = result.stdout.strip()
print(str(model_identifier, 'utf-8').split('\n')[1])

2.10.6 win32api.ShellExecute(文件、程序)

使用ShellExecute函数可以指定打开方式,如打开、编辑、打印等。非阻塞。
语法如下:
ShellExecute(hwnd, op, file, args, dir, show)
参数说明:
hwnd: 父窗口的句柄,如果没有父窗口,则为0
op : 要运行的操作,为open、print或者为空字符串
file : 要运行的程序,或者打开的脚本
args : 要向程序传递的参数,如果打开的是文件则为空字符串
dir : 程序初始化的目录
show : 是否显示窗口,1:前台打开;0:后台执行
示例:

import win32api

win32api.ShellExecute(0, "open", "C:\\Windows\\System32\\calc.exe", "", "", 1) # 打开计算器
win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 0)  # 后台执行
win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 1)  # 前台打开
win32api.ShellExecute(0, 'open', 'notepad.exe', '1.txt', '', 1)  # 打开文件
win32api.ShellExecute(0, 'open', 'http://www.baidu.com', '', '', 1)  # 打开网页
win32api.ShellExecute(0, 'open', 'D:\\music.mp3', '', '', 1)  # 播放视频
win32api.ShellExecute(0, 'open', 'D:\\mypy1.py', '', '', 1)  # 运行程序

2.10.7 win32process.CreateProcess(程序)

还有一种方法是使用CreateProcess函数运行其他程序,它可以创建一个运行相应程序的进程,并返回进程句柄、线程句柄、进程ID以及线程ID。
语法如下:
CreateProcess(appName, cmdLine, proAttr, threadAttr, InheritHandle, CreationFlags, newEnv, currentDir, Attr)
参数说明:
appName 可执行文件名
cmdLine 命令行参数
procAttr 进程安全属性
threadAttr 线程安全属性
InheritHandle 继承标志
CreationFlags 创建标志
currentDir 进程的当前目录
Attr 创建程序的属性
示例:

import win32process

hProcess, hThread, dwProcessId, dwThreadId = win32process.CreateProcess(None, "C:\\Windows\\System32\\calc.exe", None, None, 0, 0, None, None, win32process.STARTUPINFO())

可以使用win32process.TerminateProcess函数来结束已创建的进程。
语法如下:
TerminateProcess(handle, exitCode)
参数说明:
handle 要操作的进程句柄
exitCode 进程退出代码
也可以使用win32event.WaitForSingleObject等待创建的线程结束。
语法如下:
WaitForSingleObject(handle, milisecond)
参数说明:
handle : 要操作的进程句柄
milisecond: 等待的时间,如果为-1,则一直等待.
示例:

import win32process
import time

handle = win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0, win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO())  # 打开记事本,获得其句柄
time.sleep(3)
win32process.TerminateProcess(handle[0], 0)  # 终止进程

或者使用win32event.WaitForSingleObject等待进程结束。文章来源地址https://www.toymoban.com/news/detail-465348.html

import win32event
import win32process

handle = win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0, win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO())  # 创建进程获得句柄
print(win32event.WaitForSingleObject(handle[0], -1))  # 等待进程结束

到了这里,关于【Python】运行其他程序、命令和文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包