python - python的创意标准输入和错误处理
问题描述
我在 Windows10 上使用了一个第三方程序——称之为 SuckySoftware.exe。
该程序可以启动 python 脚本并执行其他操作。
当它启动 python 脚本时,不幸的是我没有启动命令窗口。这会产生三个问题:
1)我不能给它输入。例如,使用 python3 并将“input()”作为命令之一会导致 SuckySoftware.exe 挂起,因为它正在等待输入到某些不存在的命令窗口。
2)我无法获得输出。所以“print('hello')”不会出现在任何地方
3)没有错误处理。因此,如果我的 python 代码中有 ValueError,它会在该行静默失败,并且不会执行 python 的其余部分。
我通过以下方式解决了#2:
sys.stdout = open(logfile, 'wb', 0)
sys.stdout.write('hello'.encode('utf-8'))
然后使用 mTail 实时监控日志文件。
我不知道如何解决 1 或 3。
对于 1,我想知道是否有一种简单的方法可以用一个文本框启动一个简单的 GUI。每当我的日志文件显示“请输入一个值”时,我就可以将其输入到该文本框中并按 Enter,它会将其输入标准输入。然而,这似乎过于复杂。
对于 3,我想知道我是否可以捕获所有错误消息(包括失败的行号)并在脚本退出之前将它们打印到标准输出。
想法?
解决方案
首先,打开一个文件sys.stderr
,因为输出在任何情况下都可能有用。
- 最简单、最便携的技术是设置到另一个进程
sys.stdin
的(TCP,又名SOCK_STREAM
)套接字连接。 - 您也可以使用这样的套接字
sys.stdout
和/或sys.stderr
,尽管辅助进程必须使用它select
来处理多个流而不会出现死锁。(您可能希望使用包装器来sys.stderr
保留其无缓冲状态。) sys.excepthook
通过 (your) 为报告异常的函数分配一个函数stderr
。(可能已经分配了这样的功能,因为没有任何东西显示出来sys.stderr
。)
推荐阅读
- html - 在 WordPress 的 PDF 文件下载链接中检测到 HTML 恶意文件
- java - 同步在在线交易中的工作原理
- cmake - Eigen cmake 需要“target_link_libraries”,即使它只是模板
- python - 无法从给定格式中提取出生日期
- selenium - 使用酱实验室驱动时的睡眠时间范围?
- powershell - 向用户添加多个代理地址
- scala - 默认参数值方法位置
- sql - 初学者 SQL - 连接在两个表中都有标识符的表
- sql - SQL查询按接近值排序
- python - 基于日期在 R 或 Python 中粘贴因子变量值 - 创建学校假期