在Python 2.7中,我在某个循环中有以下代码
file = open("log.txt", 'a+')
last_position = file.tell()
subprocess.Popen(["os_command_producing_error"], stderr = file)
file.seek(last_position)
error = file.read()
print(error) # example of some action with the error
意图是stderr
刚刚给出的错误,比如打印出来,而file
保留了整个记录。
我是Python的初学者,我不清楚stderr = file
中发生了什么。
我的问题是error
一直是空的,即使错误一直记录在file
中。
有人可以解释原因吗?
我尝试重新添加结束并再次打开文件,或file.flush()
行之后的subprocess
。但仍然有同样的效果。
编辑:以下答案中的代码对我来说很有意义,而且似乎适用于该帖子的作者。对我来说(在Windows中)它不起作用。它提供一个空的err
和一个空文件log.txt
。如果我逐行运行它(例如调试)它确实有效。如何理解和解决这个问题?
修改:我使用Popen
更改了call
,现在可以正常使用了。我猜call
等待subprocess
完成以继续使用脚本。
答案 0 :(得分:0)
请尝试以下代码:
file = open("log.txt", 'a+')
sys.stderr = file
last_position = file.tell()
try:
subprocess.call(["os_command_producing_error"])
except:
file.close()
err_file = open("log.txt", 'r')
err_file.seek(last_position)
err = err_file.read()
print err
err_file.close()
sys.stderr
映射标准错误消息,如sys.stdout
(地图标准输出)和sys.stdin
(地图标准输入)。
这会将标准错误映射到file
。因此,所有标准错误都将写入文件log.txt
。