• python管道技术,subprocess模块详解


    管道技术介绍

          简介

           管道技术是一种将多个进程连接在一起的方法,其中一个进程的输出作为另一个进程的输入。这种技术可以用于许多不同的目的,例如将一个进程的输出传递给另一个进程进行处理,或者将多个进程连接在一起以形成一个复杂的数据处理管道。

            例子

            在Python中,可以使用subprocess模块来创建和管理进程,并使用Popen函数来创建管道。例如,以下代码将创建两个进程,其中一个进程将其输出发送到另一个进程的输入:

    1. import subprocess
    2. # 创建第一个进程
    3. p1 = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
    4. # 创建第二个进程
    5. p2 = subprocess.Popen(['grep', 'file'], stdin=p1.stdout, stdout=subprocess.PIPE)
    6. # 从第二个进程中读取输出
    7. output = p2.communicate()[0]
    8. print(output)

             在这个例子中,第一个进程运行ls -l命令,并将其输出发送到第二个进程,第二个进程运行grep file命令,并将包含file字符串的行输出到标准输出。最后,Python程序从第二个进程中读取输出并将其打印到控制台。

    subprocess模块详解

            用途

            Python的subprocess模块可以让你在Python程序中启动新进程,连接到它们的输入/输出/错误管道,并获取返回值。这个模块提供了一个强大的接口来创建和控制子进程。

            使用subprocess模块,你可以执行系统命令、调用其他可执行文件或者脚本、与其他进程进行交互等等。同时,subprocess还支持多种操作系统平台,包括Windows、Linux、Mac OS X等。下面是一些subprocess常见的用途: 

    1. 执行外部命令:通过subprocess模块可以方便地执行外部命令,比如ls、grep、awk等等。

    2. 调用其他可执行文件或脚本:如果你需要调用其他可执行文件或脚本,也可以使用subprocess模块。

    3. 与其他进程进行交互:有时候我们需要与其他进程进行交互,比如向某个进程发送数据、从某个进程读取数据等等,这时候就可以使用subprocess模块。

    4. 实现异步任务:如果你需要实现异步任务,比如并发执行多个子进程,那么subprocess模块也可以帮助你完成

            常用方法

    1. subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, timeout=None, check=False, encoding=None, errors=None) 这个函数可以方便地运行一个命令,并等待该命令完成。args参数是要执行的命令,以列表形式传递。其他参数包括输入输出流、超时时间、是否捕获输出等。

    2. subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0) 这个函数也可以运行一个命令,但不会等待该命令完成。相反,它返回一个Popen对象,您可以使用该对象来控制子进程的输入、输出和状态。

    3. Popen.communicate(input=None, timeout=None) 这个方法在Popen对象上调用,它将阻塞主线程直到子进程完成。如果指定了input,则将其发送给子进程的stdin。stdout和stderr作为元组返回。

    4. Popen.poll() 这个方法检查子进程是否已经结束。如果已经结束,它将返回退出代码。否则,它将返回None。

    5. Popen.wait(timeout=None) 这个方法将阻塞主线程直到子进程完成。如果指定了timeout,则在超时时间内等待子进程完成。

    6. Popen.terminate() 这个方法终止子进程。它发送SIGTERM信号给子进程,然后等待其退出。

    7. Popen.kill() 这个方法杀死子进程。它发送SIGKILL信号给子进程,强制其退出。

     subprocess的详细使用方法也可以参考:

    Python模块学习:subprocess模块详解_Python热爱者的博客-CSDN博客

  • 相关阅读:
    【学习笔记41】DOM操作的练习
    Talk Is Cheap,Show Me The Code: 三种语言个人框架压测(Java/Go/Rust)
    vue 在使用post提交json数据、表单数据,object数据,解决方案
    C++11:右值引用
    知乎问题:.NET AOT编译后能替代C++吗?
    c#--dataGridView的分页显示
    C++11 --------- 知识点补充
    111.(leaflet篇)leaflet椭圆采集
    【JavaSE】Java集合
    数据结构题型18-哈夫曼树和哈夫曼编码
  • 原文地址:https://blog.csdn.net/Htojk/article/details/134048843