here’s my question: I’m writing a script to check if my website running all right, the basic idea is to get the server response time and similar stuff every 5 minutes or so, and the script will log the info each time after checking the server status. I know it’s no good to close the script while it’s in the middle of checking/writing logs, but I’m curious if there are lots of server to check and also you have to do the file I/O pretty frequently, what would happen if you abruptly close the script?
OK, here’s an example:
while True:
DemoFile = open("DemoFile.txt", "a")
DemoFile.write("This is a test!")
DemoFile.close()
time.sleep(30)
If I accidentally close the script while this line DemoFile.write("This is a test!") is running, what would I get in the DemoFile.txt? Do I get “This i”(an incomplete line) or the complete line or the line not even added?
Hopefully somebody knows the answer.
According to the python io documentation, buffering is handled according to the buffering parameter to the open function.
The default behavior in this case would be either the device’s block size or io.DEFAULT_BUFFER_SIZE if the block size can’t be determined. This is probably something like 4096 bytes.
In short, that example will write nothing. If you were writing something long enough that the buffer was written once or twice, you’d have multiples of the buffer size written. And you can always manually flush the buffer with flush().(If you specify buffering as 0 and the file mode as binary, you’d get “This i”. That’s the only way, though)
As @sven pointed out, python isn’t doing the buffering. When the program is terminated, all open file descriptors are closed and flushed by the operating system.