如何确保 cygwin 调用已完成?

How can I make sure that a cygwin call is finished?

我目前正在从 Python 调用 "convert"-cygwin 方法。它应该将 pdf 转换为 png 文件。但是,如果我调用转换方法并直接尝试访问生成的 png,则会出现问题,因为显然 png 尚未完全实现。

我的代码:

import os
import cv2

cmd = 'set PATH="C:/cygwin64/bin";"%PATH%" && cd '+os.path.dirname(PDFPath)+' && run convert -density 300 '+os.path.basename(PDFPath)+' -quality 100 -alpha off '+ img_path
os.system(cmd)
img = cv2.imread(img_path,0)

如果我这样做,实际上会创建 png,但 img 是 None,因为显然在调用 imread() 时图像不存在。

我也试过

while not os.path.exists(img_path):
    time.sleep(10)

然后尝试 imread(),它起作用了。有没有办法在调用 img_path 之前确保该文件确实存在?

我不想继续使用 time.sleep() 因为有一个细微的变化,在睡眠结束时 png 仍然没有从内存中完全加载。

您应该能够通过 run(例如 run convert -wait -density ...)将 -wait 作为第一个参数添加到您 运行 的命令中以获得 run等待命令完成。有关 run 命令的更多信息,请参见 cygwin 中的 man run