当前位置:  开发笔记 > 编程语言 > 正文

Python - 执行进程 - >阻塞直到它退出并抑制输出

如何解决《Python-执行进程->阻塞直到它退出并抑制输出》经验,为你挑选了2个好方法。



1> Ayman Hourie..:

使用subprocess.call().来自文档:

subprocess.call(*popenargs,**kwargs)
运行带参数的命令.等待命令完成,然后返回returncode属性.参数与Popen构造函数相同.

编辑:

subprocess.call()使用wait(),并且wait()容易受到死锁(正如汤米赫伯特指出的那样).来自文档:

警告:如果子进程生成足够的输出到stdout或stderr管道,这会阻塞等待OS管道缓冲区接受更多数据,这将导致死锁.使用communic()来避免这种情况.

因此,如果您的命令生成大量输出,请communicate()改为使用:

p = subprocess.Popen(
    ["scanx", "--udp", host],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE)
out, err = p.communicate()



2> mg...:

如果你根本不需要输出,你可以将devnull传递给stdoutstderr.我不知道这是否有所作为,但通过bufsize.现在使用devnull subprocess.call不会再遇到死锁

import os
import subprocess

null = open(os.devnull, 'w')
subprocess.call(['ls', '-lR'], bufsize=4096, stdout=null, stderr=null)

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有