python使用subprocess

编程入门 行业动态 更新时间:2024-10-28 07:23:08

<a href=https://www.elefans.com/category/jswz/34/1770869.html style=python使用subprocess"/>

python使用subprocess

subprocess

在Python中,提供了subprocess模块,通过这个模块中的相应API,
就可以开启一个子进程来执行相应的脚本来完成这个操作。 
可以通过subprocess中的Popen类来处理这个命令。
即允许你去创建一个新的进程让其执行另外的程序,
并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等。

popen类

subprocess模块定义了一个Popen类,通过它可以创建进程,并与其进行复杂的交互。

__init__(self, args, bufsize=0, executable=None, 
stdin=None, stdout=None, stderr=None, preexec_fn=None, 
close_fds=False, shell=False, cwd=None, env=None, 
universal_newlines=False, startupinfo=None, 
creationflags=0)

下面是参数的意思:

参数作用
args一般是一个字符串,是要执行的shell命令内容
bufsize设置缓冲,负数表示系统默认缓冲,0表示无缓冲,正数表示自定义缓冲行数
stdin程序的标准输入句柄,NONE表示不进行重定向,继承父进程,PIPE表示创建管道
stdout程序的标准输出句柄,参数意义同上
stderr程序的标准错误句柄,参数意义同上,特殊,可以设置成STDOUT,表示与标准输出一致
shell为True时,表示将通过shell来执行
cwd用来设置当前子进程的目录
env设置环境变量,为NONE表示继承自父进程的
universal_newlines将此参数设置为True,Python统一把这些换行符当作’/n’来处理。

进程通信实例
在shell=True这个参数,不写的时候默认是False,shell默认为/bin/sh。如果 args是一个字符串,则该字符串指定要通过shell执行的命令。这意味着字符串的格式必须与在shell提示符下键入时完全相同。这包括,例如,引用或反斜杠转义带有空格的文件名。如果args是一个序列,则第一个项指定命令字符串,任何其他项将被视为shell本身的附加参数。也就是说,Popen相当于:

Popen(['/bin/sh', '-c', args[0], args[1], ...])

解决方法就是,当需要设置shell=True时(当False时,arges是列表,第一个参数是shell命令,后面的都是参数',' 隔开),须把args设为string,空格隔开,如下:

# -*- coding: utf-8 -*-
import subprocess# output = subprocess.Popen(["python", "/home/python/Desktop/z/my_subprocess/my_add.py"],
#                           stdout=subprocess.PIPE, stderr=subprocess.PIPE)output = subprocess.Popen("python /home/python/Desktop/z/my_subprocess/my_add.py",stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)output2 = subprocess.Popen("python /home/python/Desktop/z/my_subprocess/my_input.py",stdin=output.stdout, stdout=subprocess.PIPE, shell=True)
output.stdout.close()
print 'output2:', output2
# print output2.stdout.read() # 会出现死锁
oc = output2.communicate()
print 'oc:', oc[0]

my_add.py

output的stdout只能输出在终端上的参数,如print,return不行

# def my_add():
#     a = 5
#     b = 6
#     res = a+b
#     return resa = 5
b = 6
res = a+b
print res

my_input.py

把my_add.py的输出stdout放入my_input.py里当输入参数stdin

a = input()c = a * aprint c

communicate()会避免由于输出参数过多造成死锁。返回的是一个tuple,(stdout,stderr)。
输出结果如下:


image.png

更多推荐

python使用subprocess

本文发布于:2023-07-28 18:09:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1270760.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:python   subprocess

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!