python – 捕获未写入stdout的控制台输出,stderr?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 捕获未写入stdout的控制台输出,stderr?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1506字,纯文字阅读大概需要3分钟。
内容图文
我有一个名为pregeocode的Windows应用程序(我们缺少源代码),这个程序基本上将地理编码写入输入文件.除非出现错误,否则该程序实际上不会向控制台写入任何内容.这个程序通常从一个小的Python程序调用(它处理参数等,并进行所有有趣的预处理).
我们通过查看输出文件是否实际创建来检查它是否失败(无论如何,它总是返回0).但是当它失败时,子进程显示没有任何内容打印到stderr或stdout. (它成功地处理了大约一百个,只有一个是坏的,但我希望能够看到导致错误的原因)
小python脚本通过subprocess.Popen调用应用程序:
argslist = [r'C:\workspace\apps\pregeocode.exe', '-in', inputfilename, '-out', outputfilename, '-gcp', gcp_file]
p = subprocess.Popen(argslist, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
print str(p.communicate())
给出的输出:
('', '')
但是,如果我通过cmd使用相同的参数手动运行程序,我得到的输出:
45 IMAGE_EXTENT_TOO_SMALL
(有大约60多个不同的错误消息,45表示错误号)
使用shell = True参数不会改变任何东西,我也无法在网上找到关于这个问题的任何内容.实际的exe是很久以前在内部制作的东西,我们缺少它的源代码,所以我看不出它是如何打印出来的.
那么为什么子进程实际上不能捕获stdout或stderr呢?
编辑
os.system(" ".join(argslist))
正确打印错误消息:
45 IMAGE_EXTENT_TOO_SMALL
编辑2
原来应用程序使用ERDAS的工具包.他们的工具包将所有stdout / stderr重定向到他们的日志记录子系统.然后,日志记录子系统通过“CON”重写它.
解决方法:
由于错误消息确实没有出现在stdout或stderr上,我最好的猜测是该程序正在使用Windows相当于打开/ dev / tty,无论是什么.在Unix中你可以通过小心使用pty.openpty拦截它,但据我所知,在Python中不支持类似Windows的特定技巧.您可以尝试使用Expect for Windows.
内容总结
以上是互联网集市为您收集整理的python – 捕获未写入stdout的控制台输出,stderr?全部内容,希望文章能够帮你解决python – 捕获未写入stdout的控制台输出,stderr?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。