删除python中的临时文件

时间:2013-07-13 00:13:07

标签: python temporary-files

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

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

下面的代码工作得很好,只要我不取消注释最后两行以删除“Plain.txt ...我也尝试使用存在的”tempfile“函数... .it不喜欢我将格式化的字符串数据发送到临时文件。有没有办法做到这一点,这足以让我的鸟脑理解???

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)

2 个答案:

答案 0 :(得分:2)

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

如果直接使用Windows API,您可以使用ShellExecuteEx功能等待,但它似乎不在win32api中。

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

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

答案 1 :(得分:0)

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

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

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

希望这有帮助!

相关问题