On Dec 29, 1:12 pm, t_rectenwald <[EMAIL PROTECTED]> wrote: > I've noticed an oddity when running a program, using the csv module, > within IDLE. I'm new to Python so am confused by what is happening. > Here is what I'm doing: > > 1) Open the IDLE Shell. > 2) Select File | Open... > 3) Choose my file, foo.py, opening it in a window. > 4) From that window, I hit F5 to run the module. > > Within the program, the snippet where I use the csv module is below:
Forget snippet, show us a *whole* "program". Cut out the database stuff; just use some simple made-up value for "rows". > ============================== > csvfile = open('foo.csv', 'w') Always use 'wb' -- not the cause of the current problem but it will bite you later. > writer = csv.writer(csvfile) > > for row in rows: > writer.writerow(row[0:3]) > Adding del writer may help > csvfile.close The above statement does nothing. You meant csvfile.close(), I presume. > ============================== > > The rows object is returned from a database query and is a list of > tuples. Now here is the strange thing. If I run this program > directly from the command line, i.e., > > D:\test> D:\python25\python foo.py > > It runs fine, foo.csv is created and all is well. However, when I run > it through the IDLE shell as described above, the foo.csv file is > created but remains empty at 0 bytes. When I try to delete the file, > Windows says it is in use. The only way I can break out of this is by > restarting the IDLE shell. In other words, it appears that the shell > is hanging. No it's not hanging, it's just that the file is still open; you haven't closed it. It won't be closed until you exit IDLE. > > This will run through Task Scheduler, so shouldn't be a problem, but > I'm worried that I'm coding this wrong for it to be acting this way > under IDLE. Any help or explanation would be appreciated. > Do these things inside a function, so that the objects get garbage- collected on exit. -- http://mail.python.org/mailman/listinfo/python-list