1

实际上,我会将来自 application1 的输入提供给 input.txt,实习生会触发 {used pyinotify} program1 来运行更新 output.txt 文件的 program1,但从 output.txt 读取的 application1 不会等待 program1 完成文本文件(output.txt)的写入过程,它从 output.txt 中读取旧数据。我需要 Application1 等待 program1 的进程完成我该怎么做?

import pyinotify,subprocess
def onChange(ev):
    cmd = ['/usr/bin/env', 'python','/var/www/cgi-bin/version2_1.py', ev.pathname]
    subprocess.Popen(cmd).communicate()
wm = pyinotify.WatchManager()
wm.add_watch('/var/www/cgi-bin/input.txt', pyinotify.IN_CLOSE_WRITE, onChange)
notifier = pyinotify.Notifier(wm)
notifier.loop()

这是我用来在触发输入文本时在后台运行我的 python 程序 1 的程序,在此触发后应用程序 1 执行此语句 out_file=open("/var/www/cgi-bin/output.txt", "r").read()

现在 application1 在 program1 更新之前获取输出内容!我希望 Aplication1 等待 program1 完成对 output.txt 的运行和更新

请给我一个想法,我该怎么做..

谢谢 :)

4

1 回答 1

3

有几种方法可以在 Python 中观察文件更改,其中大多数是特定于平台的。由于您没有指定您的平台,这里有一个跨平台包: http ://packages.python.org/watchdog/

您还应该看看这个问题的答案: 如何查看文件的更改?

编辑

从 inotify 常见问题解答:


问:IN_MODIFY 和 IN_CLOSE_WRITE 有什么区别? IN_MODIFY 事件在文件内容更改时发出(例如通过 write() 系统调用),而 IN_CLOSE_WRITE 在关闭更改的文件时发生。这意味着每个更改操作都会导致一个 IN_MODIFY 事件(在打开文件的操作过程中可能会发生多次),而 IN_CLOSE_WRITE 仅发出一次(关闭文件时)。

问:使用 IN_MODIFY 还是 IN_CLOSE_WRITE 哪个更好? 它因情况而异。通常使用 IN_CLOSE_WRITE 更合适,因为如果发出相应文件的所有更改,则会安全地写入文件中。IN_MODIFY 事件不一定意味着文件更改已完成(数据可能保留在应用程序的内存缓冲区中)。另一方面,必须使用 IN_MODIFY 监视许多日志和类似文件 - 在这些文件永久打开且因此无法发出 IN_CLOSE_WRITE 的情况下。


你确定你在观察 IN_CLOSE_WRITE 吗?如果您观察到 IN_MODIFY,那么如果您在写入的数据刷新到文件之前收到事件,我不会感到惊讶。

于 2011-05-14T07:59:05.763 回答