WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 10-01-2003, 06:10 PM
FlyingWren FlyingWren is offline
Member
 
Join Date: Mar 2003
Location: Fargo, North Dakota, USA
Posts: 48
Closing file handles from within function

Closing file handles works fine if I don't do it from within a function call.

Consider the following, though. I press a key, and the "file should be closed now" line appears. But, the file doesn't seem to close-- it can't be renamed or deleted without first exiting the program that created it (ie, Vizard).

am I missing something?

Code:

import viz
viz.go()

fileOutput = open(hi.txt', 'a')
fileOutput.write('hi there\n')

def mykeyboardfunc(key):
	fileOutput.flush()
	fileOutput.close()
	print "file should be closed now"
	
viz.callback(viz.KEYBOARD_EVENT, mykeyboardfunc)
Reply With Quote
  #2  
Old 10-01-2003, 07:02 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Hi,

This problem stems from the fact that Vizard runs each script twice. When you first run a script, Vizard parses the script once to check for errors. During this first parse only code in the global scope is executed, code inside functions is not executed. Next, Vizard passes the script off to the graphics engine which parses the script and begins executing code inside functions such as keyboard handlers and timer handlers. What's happening in your case is that the following code is being called twice since it resides in the global scope:
Code:
fileOutput = open(hi.txt', 'a')
fileOutput.write('hi there\n')
However the code to close the file is being called once, so there is still a handle to the file that is left open, which stops you from renaming or deleting it.

Whew, hope that made at least some sense

For now you could do something like the following, but we'll try to come up with a better solution:
Code:
import viz
viz.go()

def mykeyboardfunc(key):
	global fileOutput
	if key == 'o':
		fileOutput = open('hi.txt', 'a')
		fileOutput.write('hi there\n')
		
	if key == 'c':
		fileOutput.flush()
		fileOutput.close()
		print "file should be closed now"

	
viz.callback(viz.KEYBOARD_EVENT, mykeyboardfunc)
Reply With Quote
Reply

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 08:58 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC