我写了从prestashop数据库获取订单详细信息的应用程序,将它们放到XML文件中,然后UPS WorldShip(用于发送UPS包裹的软件)导入该XML文件并创建自己的文件,结果作为跟踪编号。在下一步中,我将解析该退出文件以获取跟踪号并将其保存在我的本地数据库中。
我的问题是如何只在准备好(创建)时才获得刚刚创建的(.out)文件。此刻我的代码如下:
tree.write("C:/ProgramData/UPS/WSTD/IMPEXP/XML Auto Import/" + today + "-" + order_id + ".xml", encoding="utf-8", xml_declaration=True)
time.sleep(1)
out_file = etree.parse("C:/ProgramData/UPS/WSTD/IMPEXP/XML Auto Import/" + today + "-" + order_id + ".out")
这是一个糟糕的解决方案。我想"等到文件被创建"。
我在python中知道fonction isfile()
检查文件是否存在,但我不知道如何检查,直到它实际上会有。
答案 0 :(得分:3)
最简单的解决方案是进行民意调查。在这里,我从Selenium的WebDriverWait课程中汲取灵感。
from time import time, sleep
class Waiter(object):
def __init__(self, poll=0.5, timeout=60):
self.poll = poll
self.timeout = timeout
def until(self, callable, message='Timed out'):
end_time = time() + self.timeout
while True:
value = callable()
if value:
break
sleep(self.poll)
if time() > end_time:
raise Exception(message)
要使用上面的类,只需初始化它并将callable传递给它的until()
方法。
import os
wait = Waiter()
wait.until(lambda: os.path.exists('fake.txt'))
答案 1 :(得分:0)
可能的解决方案是继续检查输出目录中的文件列表:当列表更改时,意味着您添加了可以处理的新文件。
伪代码:
import os
checked_files = []
while(1):
all_files = os.listdir(output_folder)
new_files = set(all_files) - set(checked_files)
for file in new_files:
# Process them
....
checked_files = all_files