1. subprocess标准库简介
subprocess允许你生成新的进程,连接它们的输入、输出、错误管道,并且获取它们的返回码,代替一些老旧的模块与功能。
这里主要探讨一下如何通过该模块的函数替代os.system函数执行命令,首先导入
import subprocess
2. subprocess常用类和函数
2.1 subprocess.run函数
本模块首先推荐使用run函数,一般用来执行各种命令,下面给出常见用法
def exec_cmd(command:str,timelimit=4):
"""
执行命令行命令
:param command: 待执行命令的字符串
:param timelimit: 命令执行超时秒数
:return: CompletedProcess实例
"""
return subprocess.run(command,shell=True,stdout=subprocess.PIPE,
stderr=subprocess.PIPE,encoding="utf-8",timeout=timelimit)
command="cat /etc/issue" # 待执行命令用于查看ubuntu版本
completed_process=exec_cmd(command)
print("执行命令获得的ubuntu版本标准输出结果为\n{}".format(completed_process.stdout))
command="cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c" # 查看CPU型号
completed_process=exec_cmd(command,timelimit=6) # 将超时秒数设置为6s,否则会超时错误
print("执行命令获得的CPU型号标准输出结果为\n{}".format(completed_process.stdout))
command="free -m" # 查看内存使用情况
completed_process=exec_cmd(command)
print("执行命令获得的内存使用情况标准输出结果为\n{}".format(completed_process.stdout))
command="nvidia-smi" # 查看显存使用情况
completed_process=exec_cmd(command)
print("执行命令获得的显存使用情况标准输出结果为\n{}".format(completed_process.stdout))
2.2 subprocess.Popen类
Popen 是 subprocess的核心,子进程的创建和管理都靠它处理,很多常用函数如run都是基于subprocess.Popen类实现的。不常见的功能可通过该类定制实现。具体用法请查阅官网文档