扭曲的 I/O 归档文件

Posted

技术标签:

【中文标题】扭曲的 I/O 归档文件【英文标题】:Twisted I/O archive files 【发布时间】:2016-07-13 07:55:09 【问题描述】:

我在编写异步 I/O 程序时遇到了麻烦。我想要实现的是:将 json 数据转储到一个临时文件中,这样我就可以使用 subprocess 创建该文件的存档(带有 json 数据)。但是我发现我正在尝试从tempfile.NamedTemporatyFile tar 一个空文件。

    serialized_data = 'a': 1

    temp_file = tempfile.NamedTemporaryFile(dir='.', prefix='serialized_', suffix='.json')
    temp_file.write(json.dumps(serialized_data))

    arch_name = temp_file.name + '.tar.gz'
    tar_cmd_args = ['tar', '-czf', arch_name, temp_file.name]
    subprocess.call(tar_cmd_args)
    #d = threads.deferToThread(subprocess.call, tar_cmd_args)

我尽量避免 I/O,因为我不想阻塞回调链,我必须确保这些操作是线程安全的。 或者是另一种解决我的问题的方法?我真的很想避免json.dump(serialized, file_name)

[编辑]

temp_file.close() 导致: tar: /home/bartosz/Documents/serialized_mnaFP_.json: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors

解决方案不是关闭文件,而是刷新。 temp_file.flush()

create & read from tempfile

【问题讨论】:

【参考方案1】:

在写入文件后和启动辅助线程之前关闭文件。

【讨论】:

现在我得到:tar: Removing leading / from member namestar: /home/bartosz/Documents/serialized_mnaFP_.json: Cannot stat: No such file or directorytar: Exiting with failure status due to previous errors,现在存档中没有文件,甚至没有像以前那样的空文件

以上是关于扭曲的 I/O 归档文件的主要内容,如果未能解决你的问题,请参考以下文章

3dmax在归档时出现归档失败是啥原因造成的?

如何管理归档文件和归档目录

Linux里面归档命令是啥?

ORACLE如何删除归档日志文件?

文件传输和为今年归档

Linux归档命令之tar