[GRASS-dev] Re: python scripts and standard input
Glynn Clements
glynn at gclements.plus.com
Sat May 15 14:46:37 EDT 2010
Massimo Di Stefano wrote:
> the work-around :
>
> > while 1:
> > try:
> > function()
> > break
> > except IOError:
> > sleep(0.1)
>
> works,
> but i have to add it for each grass command i'm running in the code.
First, I'd suggest checking to see whether this has been fixed in a
later version of Python. Or that the Python developers are at least
aware of it. Are you using the version from python.org?
If you can't get a correctly-functioning version of Python, I'd
suggest using a wrapper rather than writing the loop out repeatedly,
e.g.:
def fixed(func, *args, **kwargs):
while True:
try:
return func(*args, **kwargs)
except IOError:
pass
def fix(func):
def f(*args, **kwargs):
return fixed(func, *args, **kwargs)
return f
Then you can use e.g.:
read = fix(read)
to create a fixed version of the function. Similarly for methods:
MyType.my_method = fix(MyType.my_method)
Or you can wrap individual calls, replacing "func(...)" with
"fixed(func, ...)".
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-dev
mailing list