栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

捕获从Python调用的程序的“所有”终端输出

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

捕获从Python调用的程序的“所有”终端输出

通常,您所做的已经足以将所有输出传递到变量。

一个例外是,如果您正在运行的程序

/dev/tty
用于直接连接到其控制终端,并通过该终端而不是通过stdout(FD 1)和stderr(FD
2)发出输出。通常对安全敏感的IO(例如密码提示)执行此操作,但很少看到。


为了证明这一点有效,您可以将以下代码完全复制并粘贴到Python shell中:

import subprocessexecutable = ['/bin/sh', '-c', 'echo stdout; echo stderr >&2']p = subprocess.Popen(executable, stdout=subprocess.PIPE, stderr=subprocess.PIPE)out, err = p.communicate()print "---"print "output: ", outprint "stderr: ", err

……相反,为了证明该案例 无效

import subprocessexecutable = ['/bin/sh', '-c', 'echo uncapturable >/dev/tty']p = subprocess.Popen(executable, stdout=subprocess.PIPE, stderr=subprocess.PIPE)out, err = p.communicate()print "---"print "output: ", out

在这种情况下,内容将直接写入TTY,而不是stdout或stderr。不使用提供伪造TTY的程序(例如

script
expect
)就无法捕获此内容。因此,使用
script

import subprocessexecutable = ['script', '-q', '/dev/null',   '/bin/sh', '-c', 'echo uncapturable >/dev/tty']p = subprocess.Popen(executable, stdout=subprocess.PIPE, stderr=subprocess.PIPE)out, err = p.communicate()print "---"print "output: ", out


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660232.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号