如果以下多个(示例)程序同时运行,则需要采取哪些步骤来确保“完整”行始终正确附加到文件末尾。
#!/usr/bin/env python
import random
passwd_text=open("passwd.txt","a+")
u=("jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8917,(234)555-0077,jsmith@rosettacode.org:/home/jsmith:/bin/sh",
"jdoe:x:1002:1000:Jane Doe,Room 1004,(234)555-8914,(234)555-0044,jdoe@rosettacode.org:/home/jdoe:/bin/sh",
"xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/sh")
for i in range(random.randint(1,2)):
print >> passwd_text, random.choice(u)
passwd_text.close()
并且:即使磁盘已满,或“ulimit -f”已设置,是否可以保证“全部或全部”附加(在linux / unix上)?
(注意类似的问题:How do you append to a file?)
答案 0 :(得分:7)
我认为在python的普通open
函数中对this "bug"的讨论表明你没有获得POSIX原子保证,但如果你使用
with io.open('myfile', 'a') as f:
f.write('stuff')
http://docs.python.org/2/library/io.html#io.open
如果操作系统正确实现其write sys调用...
答案 1 :(得分:3)
您必须锁定该文件,以确保没有其他人同时写入该文件。有关详细信息,请参阅File Locking和lockfile或posixfile。
更新:如果磁盘已满,则无法在文件中写入更多数据。我不确定Python的输出重定向实现,但write
系统调用可以写入比请求更少的字节。