当前位置:   article > 正文

[Python] 运行其他程序、命令和文件_python os打开程序

python os打开程序

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

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

2.10.1 os.startfile(文件、程序)

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

import os

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

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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")  # 打开文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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)  # 运行程序
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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())
  • 1
  • 2
  • 3

可以使用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)  # 终止进程
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

或者使用win32event.WaitForSingleObject等待进程结束。

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))  # 等待进程结束
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/74714
推荐阅读
相关标签
  

闽ICP备14008679号