0

我是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

所以缺少线条,不知道为什么。我希望你能帮助我。

4

3 回答 3

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"])
于 2013-01-04T12:23:06.643 回答
2

您应该使用 with 语句来确保您的文件已关闭:

with open(filename, 'w') as fd:
    fd.write(data)
于 2013-01-04T12:43:59.890 回答
0

您在“关闭”之后错过了括号。这样做的效果是,当您在脚本中运行 wc 时,不会调用该函数并且文件不会完全写入磁盘。当脚本结束时,解释器会自动关闭文件并写入缓冲内容,因此之后您会看到 wc 的正确输出。

于 2013-01-04T12:23:20.370 回答