Python 2.7 在使用`分叉时,Python文件写入两次`

Python 2.7 在使用`分叉时,Python文件写入两次`,python-2.7,file,fork,Python 2.7,File,Fork,输出让我感到困惑: import os m = 'foo\n' n = 'bar\n' with open('test2.txt', 'w') as f: f.write(m) os.fork() f.write(n) 但是,我期望的是: foo bar foo bar 然后,我更改了打开文件的方式: foo bar bar 正如我所预料的那样 当fork时,是否存在问题?默认情况下Python缓冲文件,当您fork时,如果缓冲区尚未刷新,则两个进程都会认为

输出让我感到困惑:

import os

m = 'foo\n' 
n = 'bar\n'

with open('test2.txt', 'w') as f:
    f.write(m)

    os.fork()
    f.write(n)
但是,我期望的是:

foo
bar
foo
bar
然后,我更改了打开文件的方式:

foo
bar
bar
正如我所预料的那样


fork
时,是否存在问题?

默认情况下Python缓冲文件,当您fork时,如果缓冲区尚未刷新,则两个进程都会认为它们负责稍后刷新缓冲区,包括fork之前的部分。如果在fork之前添加显式调用以刷新流:

import os

m = 'foo\n'
n = 'bar\n'

fd = os.open('test2.txt', os.O_RDWR)
os.write(fd, m)

os.fork()
os.write(fd, n)
os.close(fd)

然后
foo
将被写入该点,缓冲区将被清空,以便家长和新孩子都可以写入
bar
,而无需携带
foo

是的,我找到了原因。谢谢
f.flush()