当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,阻塞直到缓冲区中有数据。非阻塞式的socket的recv服从的规则则是:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,产生EAGAIN的错误并返回(在Python中会抛出一个异常)。两种情况都不会返回空字符串,返回空数据的结果是对方关闭了连接之后才会出现的。
这里用到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()