我是python开发的新手。我正在尝试在文件中写入内容(tmp.addr2line)并在此文件上运行shell命令。但是当我比较我的shell命令和我刚刚创建的文件使用的文件时,它们是不同的,使用的文件更小。
有我的代码(在subprocess.call中运行的命令不是最后一个)。
test = open("tmp.addr2line", "w")
for i in __coverage_information__:
test.write(i.address + "\n")
test.close
subprocess.call("wc tmp.addr2line", shell = True)
返回
268697 268698 2686976 tmp.addr2line
如果我在python脚本之后运行wc tmp.addr2line,我得到了:
271710 271710 2717100 tmp.addr2line
所以缺少线条,不知道为什么。我希望你能帮助我。
答案 0 :(得分:2)
您没有关闭文件。你需要调用关闭函数:
test.close()
没有()
,您只是引用该函数,而不是实际调用它。在正确关闭文件之前,写入缓冲区不会被刷新,您只能看到部分写入。
您可以在with
语句中将文件用作上下文管理器。完成with
语句下方的块后,文件会自动关闭,而您根本不需要调用close()
:
with open("tmp.addr2line", "w") as test:
for i in __coverage_information__:
test.write(i.address + "\n")
最好尽可能避免使用shell=True
参数,而是使用它:
subprocess.call(["wc", "tmp.addr2line"])
答案 1 :(得分:2)
您应该使用with语句来确保文件已关闭:
with open(filename, 'w') as fd:
fd.write(data)
答案 2 :(得分:0)
在"关闭"之后你错过了方括号。这样做有效,在脚本中运行wc时,函数不会被调用,文件也不会被完全写入磁盘。 当脚本结束时,解释器会自动关闭文件并写入缓冲的竞争,所以之后你会看到wc的正确输出。