【发布时间】:2018-10-13 02:49:36
【问题描述】:
我在 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而非地址#3 打开文件? -
不!除非我做错了。我这样做:sys.stderr = open(logfile,'wb',0);raise ValueError('blah')。日志文件中没有任何内容。如果我故意犯了类似 print(,,,,) 的语法错误,也是一样。我知道写入日志文件是有效的,因为我可以执行 sys.stderr.write('blah'.encode('utf-8')) 并且有效。
-
它确实停止了脚本:raise ValueError('blah')。换句话说,如果我在此之前和之后放置一个 .write 语句,那么之前的语句会执行,但之后的语句不会。因此引发错误并停止执行,但实际错误不会写入日志文件。