python:如何以非阻塞的方式读

Python016

python:如何以非阻塞的方式读,第1张

代码是这样的:

subp = subprocess.Popen(["d:/T1.exe"], shell=True, stdout=subprocess.PIPE, bufsize=0)

subp.stdout.read()

但是发现read和readline函数是阻塞方式调用的,一定要subprocess运行结束才能返回数据。

setblocking(0)之后就是非阻塞的。 select模块只是说能够同时处理多个socket,至于这些socket是阻塞还是非阻塞,都没有关系。当然从性能上考虑,现在的趋势是select+非阻塞。

这里用到subprocess内置库

subprocess.check_output() 与 subprocess.Popen() 一个是阻塞另一个是非阻塞

主要讲 subprocess.Popen()

p = Popen(shell_str, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)

如果不加shell=True,shell_str要写成list或者tuple类型

p.wait()   如果0是正常,1是有异常

p.stdin.read()

p.stdout.read()

p.stderr.read()

stdin ,   stdout, stderr 分别是标准输出, 正常输出, 错误输出 

例子:

from subprocessimport *

p = Popen(shell_str.split(' '), stdin=PIPE, stdout=PIPE, stderr=PIPE)

p_statuscode = p.wait()