[Tutor] Checking for file completion.
Tony Pelletier
tony.pelletier at gmail.com
Tue Feb 21 19:10:41 CET 2012
Hi,
I'm struggling with what I think seems to be a problem. I've created a
program that does numerous SOAP calls. In short, I create a report on a
report server, pull that file down then parse that file that's been written
locally for data to make more SOAP calls. My problem is I'm grabbing the
filename then losing it somewhere along the way. The only thing I can
think of is that it's still open/being written and causing me a problem.
Main starts like such.
def main():
service = Service()
cleanup()
reportId = createReport(service)
#time.sleep(3)
filename = getReport(service,reportId)
getEventAttachments(service, filename)
Here are the results from a test run.
Deleting "files" directory...
"files" directory successfully created...
Report in Processing state...
WeeklyDeliveriesReport_2012-02-21.csv
WeeklyDeliveriesReport_2012-02-21.csv report succesfully written out...
None
File still being written out...
getReport() returns a filename and you actually see it twice up in the
results.
def getReport(service, reportId):
reportIds = service.client.factory.create('ArrayOfstring')
reportIds.string.append(reportId)
try:
result = service.client.service.ReportQueryById(reportIds, 'True')
if result.Report[0].ReportStatus == 'Processing':
print 'Report in Processing state...'
time.sleep(3)
getReport(service,reportId)
else:
filename = result.Report[0].ReportFileArgs.ReportFileArg[0].UserFileName
print filename
encodedfile = result.Report[0].ReportFileArgs.ReportFileArg[0].EncodedValue
encodedstring = encodedfile.encode('utf-8')
str_list = []
for line in encodedstring:
line = line.rstrip()
str_list.append(line)
string = ''.join(str_list)
data = base64.b64decode(string)
outfile = open(filename, 'w')
outfile.write(data)
outfile.close()
shutil.copyfile(filename, os.path.join('files', filename))
print filename + ' report succesfully written out...'
logging.info(filename + ' report succesfully written out...')
return filename
except suds.WebFault as e:
print e.fault.detail
then from main, I'm using filename to then make the call to
getEventAttachments and passing in filename. The None you see is a result
of my "print filename" statement.
Now, if I uncomment that time.sleep(3), it runs flawlessly which I think
tells me that the file is still being written to. I *think*...
Two questions.
1. Is that not it and if so, am I missing something obvious?
2. If it is it, is there a way to check to see if the file I'm trying to
read from is done being written to?
Thanks
Tony
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20120221/3f93d07b/attachment.html>
More information about the Tutor
mailing list