2024-09-28 20:39:13 发布
网友
我用python打开了一个文件,里面有以下代码
s=subprocess.Popen(fileName,shell=True) s.wait() os.remove(fileName)
无论文件是否关闭,它都直接跳转到操作系统删除(),此时文件尚未关闭。所以得到以下例外。在
上面的问题发生在其他机器上,但是在我的机器中,直到文件关闭代码流才出现操作系统删除()
我怎么做子流程.Popen()应等待文件关闭。在
我尝试了以下不同的方法
def removeTempFile(tempFileName): f = None while f == None: try: f=open(tempFileName,'w') f.close() except Exception as e: print "already open" f=None time.sleep(2) os.remove(tempFileName)
你可以试试这样的方法:
s=subprocess.Popen(fileName,shell=True) while True: try: os.remove(filename) break except(WindowsError): time.sleep(1) # wait 1 second ....
此代码段应反复尝试关闭该文件。如果它得到windows错误,它会等待一秒钟,然后再试一次。在
在不知道fileName的值的情况下,这只是一个猜测,但我相信您的问题是您正在等待shell退出,但是shell会启动另一个进程来打开文件,而不是等待该进程退出。在
fileName
例如,如果尝试以这种方式打开Excel电子表格,shell将查找注册表并确定打开电子表格的方法是使用命令行标志运行Excel(如果尚未运行),以防止创建空白工作表,然后向其发送DDE命令,告诉它打开该工作表。然后shell退出,您的wait完成,但文件仍处于打开状态(甚至可能尚未打开)。在
wait
如果您想等待完成,您至少需要运行打开文件的实际命令,而不依赖于shell的自动查找。如果应用程序已经在运行,这可能还不够,因为有些应用程序可能检测到一个现有实例,因此只有在应用程序尚未运行时,您的等待才有效。在
可能没有任何简单干净的方法来做你想做的事。我能建议的最好方法是,如果os.remove()调用失败,请使用轮询循环,休眠1秒,然后再试一次,但如果文件在wait()调用完成时尚未打开,则可能仍有问题。在
os.remove()
wait()
我尝试了以下不同的方法
你可以试试这样的方法:
此代码段应反复尝试关闭该文件。如果它得到windows错误,它会等待一秒钟,然后再试一次。在
在不知道
fileName
的值的情况下,这只是一个猜测,但我相信您的问题是您正在等待shell退出,但是shell会启动另一个进程来打开文件,而不是等待该进程退出。在例如,如果尝试以这种方式打开Excel电子表格,shell将查找注册表并确定打开电子表格的方法是使用命令行标志运行Excel(如果尚未运行),以防止创建空白工作表,然后向其发送DDE命令,告诉它打开该工作表。然后shell退出,您的
wait
完成,但文件仍处于打开状态(甚至可能尚未打开)。在如果您想等待完成,您至少需要运行打开文件的实际命令,而不依赖于shell的自动查找。如果应用程序已经在运行,这可能还不够,因为有些应用程序可能检测到一个现有实例,因此只有在应用程序尚未运行时,您的等待才有效。在
可能没有任何简单干净的方法来做你想做的事。我能建议的最好方法是,如果
os.remove()
调用失败,请使用轮询循环,休眠1秒,然后再试一次,但如果文件在wait()
调用完成时尚未打开,则可能仍有问题。在相关问题 更多 >
编程相关推荐