subprocess 模块
- 允许你生成新的进程
- 连接它们的输入、输出、错误管道V
- 并且获取它们的返回码
- 将输出到控制台上的信息指定输出到图形界面
- 几个应用场景:
- 每天定时8:00自动打开酷狗音乐播放歌曲
- 调用7z.exe自动解压缩.7z文件
- 通过Python远程提交一个torrent种子文件, 用电脑启动下载
subprocess 的实例
- 用默认的应用程序打开歌曲文件
#注: windows下是start、mac下是open、Linux是see
#windows环境需要加shell = True
proc = subprocess.Popen(['start', '大风吹.mp3'], shell=True)
proc.communicate()
- 用7z.exe解压7z压缩文件
proc = subprocess.Popen([r"C: Program Files\7 -Zip\7z.exe" , "x", "./datas/7z_ test.7z", "-o./datas/extract_ 7z_ test", "-aoa"], shell=True) # -aoa 代表覆盖模式;x 代表解压
proc.communicate()
指定输出到图形界面
- 如果想将原本输出到控制台上的信息或者是输出到终端上的信息,指定输出到创建的GUI界面上,那么就可以用到 subprocess 模块
- 该模块允许重新生成一个进程去执行相应的功能,返回状态码,以及信息;
- 也可以像 cmd 和 pycharm 允许那样,得到输出的数据,那么就会用到 subprocess.Popen(cmd);如果是 windows 上允许则需要加一个参数 subprocess.Popen(cmd, shell=True)
- 或者也可以使用 subprocess.getstatusoutput(cmd) 以及 subprocess.getoutput(cmd) ;都能获取到输出的日志信息,其中 cmd 是字符串命令
- 其中 subprocess.getstatusoutput(cmd) 的返回值是也该元组类型:Return (exitcode, output) of executing cmd in a shell ;
- 第一个值是返回的状态码: 0 代表访问成功;1 表示访问失败;第二个值就是返回的日志数据
- 演示示例

- 如果像将图中所示的数据输出到 PyQt5 的 TextBroswer 部件中,如下所示:
from PyQt5.Qt import *
import sys
import subprocess
class Example():
def InitUi(self, Form):
self.Ui = Form
self.Ui.resize(500, 400)
self.text = QTextBrowser(self.Ui)
self.text.resize(450, 200)
self.text.move(10, 20)
self.btn = QPushButton(self.Ui)
self.btn.setText('start')
self.btn.move(10, 250)
self.btn.clicked.connect(self.Ping)
def Ping(self):
resoult = subprocess.getoutput('ping 127.0.0.1')
self.text.append(resoult)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = QWidget()
ui = Example()
ui.InitUi(window)
window.show()
sys.exit(app.exec_())
