[GRASS-dev] QGIS winGRASS blank space problem
Glynn Clements
glynn at gclements.plus.com
Tue Jun 5 10:30:49 EDT 2007
Paul Kelly wrote:
> > a friend told me that with the latest QGIS release candidate,
> > there is a winGRASS problem:
> >
> > $ v.rast.stats vector=CEA_riserve raster=CEA_slope colprefix=delete
> > c:/Programmi/Quantum: c:/Programmi/Quantum: No such file or directory
> >
> > He uses a path with space:
> > c:/Programmi/Quantum GIS/
> > ^
> >
> > Is that a GRASS problem? Where to fix? To me it looks like
>
> OK I've looked into this a bit more and it seems there is indeed a problem
> but I don't think it's GRASS. More to do with the way the Msys shell
> interprets the path to the script passed to it by the Windows _spawnlp()
> function. It reminds me strongly of what Glynn was saying about the
> difference between a list of strings, and one string with spaces used as
> separators: http://grass.itc.it/pipermail/grass-dev/2007-May/031394.html
>
> I wonder if something like that is going on with the way the Msys shell is
> interpreting its command-line arguments, or with the way Windows is
> passing them to it. As proof of concept, the patch below seems to make it
> work, but putting quotes in when they shouldn't be needed is very ugly and
> might break it for non-Msys shells so I don't want to fix that.
Ah.
http://msdn2.microsoft.com/en-us/library/20y988d2(VS.80).aspx
Arguments for the Spawned Process
To pass arguments to the new process, give one or more pointers to
character strings as arguments in the _spawn call. These character
strings form the argument list for the spawned process. The combined
length of the strings forming the argument list for the new process
must not exceed 1024 bytes. The terminating null character ('\0') for
each string is not included in the count, but space characters
(automatically inserted to separate arguments) are included.
Note
Spaces embedded in strings may cause unexpected behavior; for example,
passing _spawn the string "hi there" will result in the new process
getting two arguments, "hi" and "there". If the intent was to have the
new process open a file named "hi there", the process would fail. You
can avoid this by quoting the string: "\"hi there\"".
Needless to say, it doesn't say what happens (or what to do) if the
argument itself contains quotes.
Does anyone want to dig into the source code for Python's subprocess
module to see how they handle this?
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-dev
mailing list