Python 使用subprocess

subprocess 模块

  1. 允许你生成新的进程
  2. 连接它们的输入、输出、错误管道V
  3. 并且获取它们的返回码
  4. 将输出到控制台上的信息指定输出到图形界面
  • 几个应用场景:
    • 每天定时8:00自动打开酷狗音乐播放歌曲
    • 调用7z.exe自动解压缩.7z文件
    • 通过Python远程提交一个torrent种子文件, 用电脑启动下载

subprocess 的实例

  1. 用默认的应用程序打开歌曲文件
#注: windows下是start、mac下是open、Linux是see
#windows环境需要加shell = True
proc = subprocess.Popen(['start', '大风吹.mp3'], shell=True)
proc.communicate()

  1. 用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 表示访问失败;第二个值就是返回的日志数据

  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_())

  • 结果展示

posted @ 2021-06-26 18:40  廿九九  阅读(901)  评论(0)    收藏  举报