确定文件何时完成复制

大家好,
我正在编写一些代码,以监视目录的外观
来自工作流的文件.当这些文件出现时,我写了一个命令文件
到告诉设备如何处理文件的设备.这
命令文件的外观触发设备以抓住
原始文件.我的问题是我不想将命令文件写入
该设备直到复制了工作流的原始文件
完全地.由于这些文件很大,我的程序很有可能
目录是中拷贝时扫描目录的,所以我需要
确定哪些文件已复制,哪些文件仍在
中拷贝.
我在Google上没有看到任何内容,但我看不到
使用OS.stat()方法在此执行此操作的一种明显方法
文件路径.有人对我如何实现这一目标有任何想法吗?
提前致谢!
道格

# 回答1


赖特森写道:
最好的方法是让复制文件复制的程序复制它们
临时命名文件并在完成后将其重命名.那样
知道何时通过扫描带有特定掩码的文件来完成.
如果不可能,您可能能够使用Pyinotify
(http://pyinotify.sourceforge.net/)注意在
目录,然后处理文件.
-larry
# 回答2


-----开始PGP签名消息-----
哈希:sha1
这似乎是一个同步问题.场景描述可以清除
事情起来,我们可以提供帮助:
程序W(工作流)将文件f副本f到目录b
程序D(狗)民意调查目录b要查找是否有任何新文件f
在这种情况下,程序D不知道F是否已经完全
复制,但W确实如此.
解决方案:
创建自定义锁定机制.程序W将文件d/f.lock写入
指示文件F尚未完成,当F完全复制F时将其删除.
我的程序W崩溃在中拷贝F.Lock中都保留了,因此程序D
不用费心处理F.从W中的崩溃中恢复将是另一个
解决问题的问题.
此致,
曼努埃尔.
赖特森写道:
-----开始PGP签名-------------
版本:gnupg v1.4.9(gnu/linux)
评论:将gnupg与mozilla一起使用-http://enigmail.mozdev.org
ieyearecaayfakh04skacgkqi2zpkmceahi0eqcgsvqg51fwiw i47jxqtbr8gz2u
UUKAOKM15UAM3KPEYJHSIGQ+68RQ8WUU
= UFHI
-----结束PGP签名-----
# 回答3


也提供:
PGM-W复制/创建任何B/虚拟
完成后,PGM-W将B/虚拟命名为B/F
PGM-D仅用于B/F的侦察兵,当发现时做事
Steve nodeby@@hughes.net
Manuel Vazquez Acosta写道:
-----开始PGP签名-------------
版本:gnupg v1.4.9(gnu/linux)
评论:将gnupg与mozilla一起使用-http://enigmail.mozdev.org
ieyearecaayfakh04skacgkqi2zpkmceahi0eqcgsvqg51fwiw i47jxqtbr8gz2u
UUKAOKM15UAM3KPEYJHSIGQ+68RQ8WUU
= UFHI
-----结束PGP签名-------------
-http://mail.python.org/mailman/listinfo/python-list
# 回答4


伙计们,
感谢您的答复,它们很有帮助.我应该包括
我最初的问题,我没有太多的争议 l对程序进行
我想要的那个写作(PGM-W).否则,写入不同的
文件名然后重命名的解决方案将效果很好.没有办法
从os.stat()方法告诉文件何时完成
被复制?我运行了一些测试程序,其中之一持续
将大文件从一个目录复制到另一个目录,另一个目录
连续执行glob.glob("*.pdf"),并查看
ST_ATIME和ST_MTIME OS.STAT(文件名)的返回值的部分.
从该实验看起来像st_atime和st_mtime等于每个
其他直到文件已完成为止.什么都没有
关于st_atime或st_mtime的文档使我认为这是
没错,这只是我对我的两个测试程序的观察
描述.
有什么想法吗?谢谢!
道格
# 回答5


赖特森写道:
我想问题是"完成复制'的定义是什么?".那里
没有明确的操作系统命令,说"我已经复制到了此文件
而且我不会在其中添加任何内容".
如果我无法控制发送申请,我将估计
最长的文件可能需要多长时间复制,然后将其加倍,然后仅用
查看至少过去的st_ctime的文件.你什么
建议也可以工作.
-larry
# 回答6


感谢您的答复,它们很有帮助.我应该包括
您是否可以我们的OS模块来呼唤LSOF,看看是否有人
目标文件还打开了吗?我假设写作过程
完成编写将关闭文件.
检查"男人LSOF"
# 回答7


赖特森写道:
其他直到文件已完成为止.什么都没有
关于st_atime或st_mtime的文档使我认为这是
没错,这只是我对我的两个测试程序的观察
描述.
有什么想法吗?谢谢!
道格
我的团队使用的解决方案是监视文件大小.如果文件
已经停止生长x时间(我们使用45秒)文件是
完成复制.不优雅,但它起作用.
- -
Ethan
# 回答8


-----开始PGP签名消息-----
哈希:sha1
伊桑·弗曼(Ethan Furman)写道:
其他直到文件已完成为止.关于st_atime或st_mtime的文档中没有任何内容使我认为这是我对我的两个测试程序的观察.谢谢!道格

我的团队使用的解决方案是监视文件大小.如果文件
已经停止生长x时间(我们使用45秒)文件是
完成复制.不优雅,但它起作用.
- -
伊桑
我也认为,匹配MD5SUM可能会起作用.只是设置为
每隔几秒钟检查副本的MD5SUM(或任何时间
您想要的间隔)并与原件匹配.当他们匹配时
复制完成了.我实际上没有尝试过,但认为它可能起作用.
任何经验丰富的程序员在那里让我知道这是否是
请不可行.
k
-----开始PGP签名-------------
v erSion:gnupg v1.4.6(gnu/linux)
评论:将gnupg与mozilla一起使用-http://enigmail.mozdev.org
ID8DBQFIDVKX8VMNFZRLPQORASJ2AKCP8WMZ93VZ8Y9K+MDSP3 3KH/WHNGCGL/WM
qtfbfyieghu/dnsqzerrwyq =
= xvjq
-----结束PGP签名-----

# 回答9


基思写道:
我的团队使用的解决方案是监视文件大小.如果FileHas停止生长X时间(我们使用45秒),则文件复制.不优雅,但它起作用.-伊森
我也认为,匹配MD5SUM可能会起作用.只是设置为
每隔几秒钟检查副本的MD5SUM(或任何时间
您想要的间隔)并与原件匹配.当他们匹配时
复制完成了.我实际上没有尝试过,但认为它可能起作用.
任何经验丰富的程序员在那里让我知道这是否是
请不可行.
k
-----开始PGP签名-------------
版本:gnupg v1.4.6(gnu/linux)
评论:将gnupg与mozilla一起使用-http://enigmail.mozdev.org
ID8DBQFIDVKX8VMNFZRLPQORASJ2AKCP8WMZ93VZ8Y9K+MDSP3 3KH/WHNGCGL/WM
qtfbfyieghu/dnsqzerrwyq =
= xvjq
-----结束PGP签名-------------
如果文件很大,这可能会消耗大量CPU和I/O来重新计算
一遍又一遍地的校验和.我会尝试"不是
修改/访问/创建"首先在一定时间内.
-larry
# 回答10


在7月9日,5:34*pm,keith 我也认为,匹配MD5SUM可能会起作用. *只是设置以便
每隔几秒钟检查副本的MD5SUM(或任何时间
您想要的间隔)并与原件匹配. *当他们匹配时
复制完成了.我实际上没有尝试过,但认为它可能起作用.
任何经验丰富的程序员在那里让我知道这是否是
请不可行.
k
-----开始PGP签名-------------
版本:gnupg v1.4.6(gnu/linux)
评论:将gnupg与mozilla -http://enigmail.mozdev.org一起使用
ID8DBQFIDVKX8VMNFZRLPQORASJ2AKCP8WMZ93VZ8Y9K+MDSP3 3KH/WHNGCGL/WM
qtfbfyieghu/dnsqzerrwyq =
= xvjq
-----结束PGP签名-------------
我在Filesize和MD5上使用OS.stat()的组合.
检查MD5S的工作原理,但大文件可能需要很长时间.修理
那,我写了一个简单的稀疏MD5和生成器.它需要一个小
来自文件各个区域的数字字节,并创建一个MD5
结合所有部分.实际上,这是我唯一的解决方案
想出观看Windows Copy的文件夹.
当用户复制到手表时,Filesize解决方案不起作用
文件夹使用Windows上的拖放,因为它分配了所有
在编写任何数据之前,文件的属性.文件大小
始终显示文件的全尺寸.
〜肖恩
# 回答11


肖恩·迪扎佐(Sean Dizazzo)写道:
我也认为,匹配MD5SUM可能会起作用.只需设置,以便每两秒钟(或您想要的任何时间介入)iTcheck iTcheck iTCHECK,并与原件匹配.当他们完成匹配时.我实际上没有尝试过,但认为它可能起作用.任何经验丰富的程序员都在那里 e知道是否可以进行此功能. 33kH/whngcgl/wmqtfbfyieghu/dnsqzerrwyq == xvjq --------------------------------

我在Filesize和MD5上使用OS.stat()的组合.
检查MD5S的工作原理,但大文件可能需要很长时间.修理
那,我写了一个简单的稀疏MD5和生成器.它需要一个小
来自文件各个区域的数字字节,并创建一个MD5
结合所有部分.实际上,这是我唯一的解决方案
想出观看Windows Copy的文件夹.
当用户复制到手表时,Filesize解决方案不起作用
文件夹使用Windows上的拖放,因为它分配了所有
在编写任何数据之前,文件的属性.文件大小
始终显示文件的全尺寸.
〜肖恩
虽然很大程度上取决于复制程序的副本,但我最近去过
能够让Pyinotify观看文件夹.通过观看in_close_write事件我
可以查看何时由作者关闭文件,然后立即对其进行处理
写信后.现在,如果作者做类似的事情:
打开


打开附录


..
..
..
这也无法正常工作.
供参考,
拉里

# 回答12


肖恩·迪扎佐(Sean Dizazzo)写道:
我也认为,匹配MD5SUM可能会起作用.只需设置,以便每两秒钟(或您想要的任何时间介入)iTcheck iTcheck iTCHECK,并与原件匹配.当他们完成匹配时.我实际上没有尝试过,但认为它可能起作用.任何经验丰富的程序员在那里让我知道是否可以进行此功能. Linux)注释:与Mozilla一起使用-http://enigmail.mozdev.orgid.orgid8dbqfidvkx8vmnfzrlpqorasj2akcp8wmzcp8wmzcp8wmz8y9k8y9k8y9k8y9k8y9k +mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

我在Filesize和MD5上使用OS.stat()的组合.
检查MD5S的工作原理,但大文件可能需要很长时间.修理
那,我写了一个简单的稀疏MD5和生成器.它需要一个小
来自文件各个区域的数字字节,并创建一个MD5
结合所有部分.实际上,这是我唯一的解决方案
想出观看Windows Copy的文件夹.
当用户复制到手表时,Filesize解决方案不起作用
文件夹使用Windows上的拖放,因为它分配了所有
在编写任何数据之前,文件的属性.文件大小
始终显示文件的全尺寸.
〜肖恩
很好的信息,肖恩,谢谢.另一种选择是尝试重命名
该文件 - 如果它仍在复制开放,那将失败;成功
指示副本已完成.当然,正如拉里·贝茨(Larry Bates)指出的那样,
如果副本紧随其后,可能会失败.
希望这不是OP的问题.
- -
Ethan

# 回答13


您也可以复制到 同一磁盘上的另一个名称以及复制时 已经完成仅"移动"(MV)文件到文件名 申请期望. 例如. Qmail以这种方式工作,写入传入的邮件 文件夹. Met Vriendelijke groet, 威尔伯特·贝伦德森(Wilbert Berendsen) -http://www.wilbertberendsen.nl/ "您必须是您希望在世界上看到的变化." - 圣雄甘地

标签: python

添加新评论