我希望程序等到特定文件包含文本而不是空字符串。另一个程序将数据写入文件。当我运行第一个程序时,由于while循环不断检查文件内容,我的计算机开始过热。我该怎么办而不是那个循环?
答案 0 :(得分:1)
更好的解决方案是从Python脚本中启动该过程:
from subprocess import call
retcode = call(['myprocess', 'arg1', 'arg2', 'argN'])
检查retcode
是否为零,这意味着成功 - 您的流程成功运行且没有任何问题。您也可以使用os.system
代替subprocess.call
。一旦完成该过程,您就会知道现在可以读取该文件。
为什么这种方法比监控文件更好?
进程可能会失败,并且您尝试读取的文件中可能没有输出。 在这种情况下,您的进程将一次又一次地检查文件,查找数据,这会浪费内核I / O操作时间。没有什么可以保证这个过程在任何时候都能成功。
进程可能会收到信号,(例如,STOP
和CONT
),如果进程收到STOP
信号,内核将停止进程并在那里您可以从输出文件中读取任何内容,尤其是如果您打算一次性读取所有数据,就像您对文件进行排序一样。一旦过程收到CONT信号,该过程将再次开始。基本上,这意味着您的Python脚本将在进程停止时尝试从文件中同时读取。
此方法的缺点是,在Python脚本处理文件输出之前,该过程需要先完成。 subprocess.call
块,下一行不会被Python解释器执行,直到生成的进程首先完成,您可以改为使用非阻塞的subprocess.Popen
。更好,如果可能的话,将进程的输出重定向到stdout并使用Popen
从stdout读取进程的输出,然后将Python脚本的输出写入文件。