您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

您可以像往常一样使python子进程输出stdout和stderr,但也可以将输出捕获为字符串吗?

您可以像往常一样使python子进程输出stdout和stderr,但也可以将输出捕获为字符串吗?

这个例子似乎对我有用:

# -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4

import subprocess
import sys
import select

p = subprocess.Popen(["find", "/proc"],
    stdout=subprocess.PIPE, stderr=subprocess.PIPE)

stdout = []
stderr = []

while True:
    reads = [p.stdout.fileno(), p.stderr.fileno()]
    ret = select.select(reads, [], [])

    for fd in ret[0]:
        if fd == p.stdout.fileno():
            read = p.stdout.readline()
            sys.stdout.write('stdout: ' + read)
            stdout.append(read)
        if fd == p.stderr.fileno():
            read = p.stderr.readline()
            sys.stderr.write('stderr: ' + read)
            stderr.append(read)

    if p.poll() != None:
        break

print 'program ended'

print 'stdout:', "".join(stdout)
print 'stderr:', "".join(stderr)

通常,在任何情况下您想同时处理多个文件描述符,却又不知道哪个文件可以读取内容,则应使用select或等效方法(例如Twisted Reactor)。

python 2022/1/1 18:40:20 有313人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶