In Python 2.7 I have the following code inside certain loop
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
The intention is that the error that was just given by stderr
gets, say printed, while file
is keeping the whole record.
I am a beginner in Python and I am not clear what happens in the stderr = file
.
My problem is that error
keeps being empty, even though errors keep getting logged in the file
.
Could someone explain why?
I have tried adding closing and opening the file again, or file.flush()
right after the subprocess
line. But still the same effect.
Edit: The code in the answer below makes sense to me and it seems to work for for the author of that post. For me (in Windows) it is not working. It gives an empty err
and an empty file log.txt
. If I run it line by line (e.g. debugging) it does work. How to understand and solve this problem?
Edit: I changed the Popen
with call
and now it works. I guess call
waits for the subprocess
to finish in order to continue with the script.