Python执行一个文件,然后删除它

时间:2012-02-05 00:14:14

标签: python

对于Stackoverflow专家来说,对于Python程序员来说,这是一个很难的。

我正在使用Python编写的加密SQLITE3容器。最终目标是用户,而不是开发人员。

所有功能都按预期工作,但我的问题是从容器中执行EXECUTE文件的功能。

EXECUTE的工作原理:

  1. 我使用tempfile.mkdtemp
  2. 创建一个临时文件夹
  3. 我将文件从容器解密到该文件夹​​中(据我所知,这是打开文件的唯一方法)
  4. 答:在Windows上,我使用os.system('file_name& exit')执行文件,因此使用默认应用程序打开文件(例如:默认情况下带有传真查看器的图像,默认情况下带有媒体播放器的音乐等等)。这通常是阻止的。
  5. B:在Ubuntu / Mint上(这是我到目前为止所测试的全部内容),我使用subprocess.check_output(['xdg-open',file_name])执行,但这并不总是阻塞(例如:打开一个文本时)默认情况下使用Gedit文件,如果Gedit已经打开,则函数立即返回。
  6. 我删除了文件
  7. 我删除了临时文件夹,因为它没有自动删除
  8. 好的,步骤1和2都可以。我宁愿不在HDD上写文件,例如我想从内存中执行它,但你需要告诉每个应用程序WHERE打开一个文件,它必须是来自HDD的路径,对吗?

    最安全的是为文本,图像,音乐,视频实现我自己的内部查看器,因此我不需要在HDD上导出数据。但这是不现实的:)

    所以问题是步骤4和5.如果执行没有阻塞,我如何知道何时删除文件?...

    我尝试了子进程(wait,communication,check_call)和os.system中的所有函数来执行阻塞...也许还有其他函数等待进程完成?...

    也许有办法自动删除临时文件?或者我应该在运行时列出一个列表,并在程序关闭时删除它们......

    也许有办法检查某个应用是否打开了某个文件?例如:“my-pic.jpg”由Image-Viewer打开,所以我无法删除它,但我会在几秒钟内再次检查,如果没有其他应用程序使用它,我可以删除它。 //也许用“ps ax | grep my-pic”我可以找到文件是否打开。但这不适用于Windows。

    任何想法,任何消化?

    非常感谢!

1 个答案:

答案 0 :(得分:1)

一些想法:

  • 让用户在不再需要暂时提取的文件时告诉您的应用程序
  • 查询Windows API以查找which processes are using files in a certain folder(例如您的临时文件夹)
  • 无论如何,尝试在打开文件后立即删除该文件;这通常可行,因为许多应用程序不保护他们正在使用的文件,即它们允许其他应用程序修改/删除文件,即使他们正在使用它
  • 看看PendMoves/MoveFile。也许你可以为你的应用程序实现类似的东西。
  • 为您的应用程序创建一个小型RamDisk,并使用它来存储临时文件
  • 使用TrueCrypt或类似工具安装加密容器(由您的应用程序管理)以存储临时文件,并在必要时强制卸载这些容器。