python——subprocess模块

subprocess模块是Python中用于启动新进程、执行命令并获取输出的工具,支持通过stdin、stdout和stderr进行进程间通信。它包含了run、call、check_call、getoutput等函数,以及Popen类,允许设置超时和使用shell。示例代码展示了如何创建子进程并输入命令获取输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

subprocess模块:用于启动新的进程的模块,它可以用于执行外部命令,获取进程的输出向进程发送输入和等待进程结束。

多进程协同,python里大致有三种方式:

1、os.system函数              阻塞式

2、multiprocessing 模块    使用场景,密集型的计算

3、subprocess模块

subprocess模块主要函数:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False):执行指定的命令,等待命令执行完成后返回一个对象。

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
:执行指定的命令,放回命令执行的状态。

subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False) :与call的主要区别是会输出报错。

subprocess.getoutput(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False):执行命令,并将其输出形成字符串返回。

subprocess.Popen 它是底层

process = subprocess.Popen(
    'cmd',
    shell=True,
    cmd='路径'  #  执行命令的位置
    stdout=subprocess.PIPE,
    stdin = subprocess.PIPE,
    stderr = subprocess.PIPE)

shell: 打开终端,Linux中是终端,Windows中是cmd
stdout=subprocess.PIPE:如果该命令执行成功,那么将该命令的标准输出放入管道


#! /usr/bin/env pyhton

import subprocess

obj = subprocess.Popen(['python'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True)    # 执行命令,打开python环境

#注意  shell=True的意思是,将通过操作系统的shell执行命令。确保你环境里可以执行你操作的命令
#universal_newlines=True的意思是,stdout和stderr的输出是字符串。方便写入文件或者输出

obj.stdin.write('print(1)\n')    # 输入命令
obj.stdin.write('print(2)')
obj.stdin.close()

cmd_out = obj.stdout.read()      # 获取输出
obj.stdout.close()
cmd_err = obj.stderr.read()      # 获取错误
obj.stderr.close()

print(cmd_out)
print(cmd_err)
~                   


 

函数主要参数介绍:

args :要执行的命令,必须是个字符串,字符串参数列表。

stdin、stdout、stderr:子进程的标准输入  输出  错误 最常用的是subprocess.PIPE。

timeout : 设置命令超时。

shell : 值为bool,如果参数为ture 将通过操作系统的shell执行命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值