【问题标题】:Deleting temporary files in python在python中删除临时文件
【发布时间】:2013-07-13 00:13:07
【问题描述】:

我真的很想学习如何使用似乎可用的很酷的格式提交问题,但对我来说,如何做到这一点并不明显......

我的问题:我的计划是将“birdlist”(从列表框输出)打印到文件“Plain.txt”,然后 删除文件,使其在程序退出后不可用。问题在于,由于某种原因,“Plain.txt”在打印开始之前就被删除了……

只要我不取消注释最后两行以删除“Plain.txt...”,下面的代码就可以很好地工作...我还尝试使用存在的“tempfile”函数... .它不喜欢我将格式化的字符串数据发送到临时文件。有没有一种简单的方法可以让我的鸟脑理解???

text_file = open("Plain.txt","w")
for name,place,time in birdlist:
    text_file.write('{0:30}\t {1:>5}\t {2:10}\n'.format(name, place, time))
win32api.ShellExecute (0,"print",'Plain.txt','/d:"%s"' % win32print.GetDefaultPrinter (),".",0)
text_file.close()
#os.unlink(text_file.name)
#os.path.exists(text_file.name)

【问题讨论】:

  • win32api调用之前关闭文件。

标签: python temporary-files


【解决方案1】:

问题是 Windows ShellExecute 只会启动该进程,然后返回给您。它不会等到打印过程完成。

如果直接使用windows API,可以使用ShellExecuteEx函数等待,但win32api中似乎没有。

如果用户将要使用您的应用程序一段时间,您可以保留文件记录并稍后将其删除。

或者您可以编写自己的打印代码,这样您就不必将其交给其他人。见Print to standard printer from Python?

【讨论】:

  • 感谢您对此的帮助,Python 没有为打印到打印机提供一些不那么深奥的支持有点烦人......但我接受了您的第一个建议并为“ WM_DELETE_WINDOW”,它会在输出时删除文件...我喜欢编写自己的一些打印代码的想法...需要在这种方法上做一些工作...谢谢您让我继续...
【解决方案2】:

我正在编写的程序也有类似的问题。我在 for 循环下调用 win32api.ShellExecute() 来打印文件列表并在之后删除它们。我开始在屏幕上收到 Notepad.exe 弹出消息,告诉我该文件不存在。在插入一些raw_input("press enter") 语句进行调试后,我发现我需要延迟以避免删除文件过快,因此在我的ShellExecute("print",...) 之后添加time.sleep(.25) 行似乎可以解决问题并修复它。

可能不是最干净的方法,但我找不到更优雅的 Python 打印方法可以更好地处理它。

我一直在考虑的一件事是使用在成功的ShellExecute() 调用时返回的“实例句柄 ID”。如果它 > 32 并且 >= 0,则调用成功。如果 ShellExecute 在该范围内返回,则可能仅运行删除,而不是尝试使用任意 time.sleep 值。唯一的问题是,如果它不成功并退出程序,它会返回一个异常。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2013-11-01
    • 1970-01-01
    相关资源
    最近更新 更多