.Popen 一个 pdf 然后在关闭后删除文件

.Popen a pdf then delete file once it is closed

我需要 .Popen 一个 pdf,让我的用户查看它,打印它,做任何他们需要做的事情,然后一旦它关闭,删除文件。目前我尝试的是:

def open_file():
  try:
    subprocess.Popen(file_path, shell=True)
  except:
    print(exception)
  finally:
    if os.path.exists(file_path):
      os.remove(file_path)
      print("File successfully removed.")

我需要的是更像这样的东西:

def open_file():
  try:
    subprocess.Popen(file_path, shell=True)
  except:
    print(exception)
  finally:
    if os.path.exists(file_path):
      while file_path.IS_OPEN:
        sleep(1)
      if file_path.IS_NOT_OPEN:
        os.remove(file_path)
        print("File successfully removed.")

或类似的东西。我还是个新手,所以我确定我的语法是错误的。这可能吗?

我发现,如果我在第一个示例的 os.remove 之前放置一个睡眠函数,我会收到一条错误消息,说它无法删除打开的文件,否则它会在打开之前以某种方式删除导致打开错误。我可以根据第一个错误进行某种循环,不断检查文件是否打开,如果没有打开,则将其删除?

虽然您打开了 PDF reader,但您并没有等待它完成。您可以等到程序退出后再尝试删除。几个 subprocess 函数执行此操作,但 run 正在考虑现代方法。

subprocess.run(file_path, shell=True)

如果子流程实际上是 PDF reader,则此方法有效。有时中间程序运行 reader 然后退出,破坏了这个解决方案。