Asked  6 Months ago    Answers:  5   Viewed   31 times
  1. How often does Python flush to a file?
  2. How often does Python flush to stdout?

I'm unsure about (1).

As for (2), I believe Python flushes to stdout after every new line. But, if you overload stdout to be to a file, does it flush as often?



For file operations, Python uses the operating system's default buffering unless you configure it do otherwise. You can specify a buffer size, unbuffered, or line buffered.

For example, the open function takes a buffer size argument.

"The optional buffering argument specifies the file’s desired buffer size:"

  • 0 means unbuffered,
  • 1 means line buffered,
  • any other positive value means use a buffer of (approximately) that size.
  • A negative buffering means to use the system default, which is usually line buffered for tty devices and fully buffered for other files.
  • If omitted, the system default is used.


bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)
Tuesday, June 1, 2021
answered 6 Months ago

Any time code can execute between when you check something and when you act on it, you will have a race condition. One way to avoid this (and the usual way in Python) is to just try and then handle the exception

while True:
    mydir = next_dir_name()
    except OSError, e:
        if e.errno != errno.EEXIST:
        # time.sleep might help here

If you have a lot of threads trying to make a predictable series of directories this will still raise a lot of exceptions, but you will get there in the end. Better to just have one thread creating the dirs in that case

Wednesday, July 28, 2021
answered 4 Months ago
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter. 

Essentially, you can dump any text you want into the file. CTRL-D sends an end-of-file signal, which terminates input and returns you to the shell.

Sunday, August 8, 2021
answered 4 Months ago

python --version outputs to STDERR.

You need to merge STDERR into STDOUT:

python --version >> path.log 2>&1

For reference, you can verify such behavior by saying:

$ python --version 1>/dev/null
Python 2.7.4

The STDOUT in the above example was redirected to /dev/null. This would imply that the output is being sent to STDERR.

Sunday, August 15, 2021
answered 4 Months ago

You may keep local file file_pc as is (pipes.quote will escape the spaces). The remote file should be changed:

import pipes

file_pi = 'pi@192.168.X.X:/home/pi/folder/file with space.smth'
host, colon, path = file_pi.partition(':')
assert colon
file_pi = host + colon + pipes.quote(path)

i.e., user@host:/path/with space should be changed to user@host:'/path/with space'

Thursday, September 2, 2021
answered 3 Months ago
Only authorized users can answer the question. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :