Open Process on OSX
J. Landman Gay
jacque at hyperactivesw.com
Tue Oct 18 15:27:05 CDT 2005
Samuel M. Smith wrote:
> I can successfully open and read from a process but I can not get write
> to process to work on OS X 10.4.2
> at least not all the way.
> First if I open process with text then runrev converts newlines to
> carriage returns. This is
> not correct for OS X. Especially unix processes which expect Unix
> If I open with binary I can append newline characters numtochar(10)
> that will get sent OK.
> The big problem is if I try to read in the process.
> I am using a very simple test shell process
> echo "Hello there"
> echo "Who are you?"
> read DATA
> echo "$DATA" > /Users/smithsm/Data/code/revolution/temp.txt
> echo "$DATA"
> echo "Goodbye"
> This works from the command line in terminal
> I put the process name into a text field named "Process"
> I open it with
> open process field "Process" for binary update
> I read it with
> read from process field "Process" until linefeed in 1 second
> put the result into field "Result"
> put it after field "BagRead"
> I try to write with
> put field "BagWrite" into bag
> put bag & numtochar(10) into bag
> write bag to process field "Process"
> The behavior is as follows:
> I open the process ok
> I read the first line ok
> I read the second line ok
> I write
> I try to read the third line and the result is timed out
> I never can read from the process once the process tries to read from
> The write was correctly received by the process because it gets written
> to the file in the process
> However runrev doesn't manage reads by the process correctly since I
> can't read from the process by runrev
> once the process tries to read from runrev.
> Looks like a bug.
I think what is happening is that the pointer has moved to the end of
the data and there is nothing left to read. I haven't specifically used
the "open/read process" commands, but it looks like they function
exactly the way opening and reading files does. If so, every read and
write moves the current location of the pointer to the end of the string
just read or written. When you read the first line, the pointer is at
the end of that line. Reading the next line moves it to the end of the
second line. Writing a line then moves it to the end of the third line.
If you then issue another "read" command, you are at the end of the file
and there is nothing to read.
To read the third line in this situation, you must include the "start"
position in the "read" command, which should indicate the character
offset of the third line. You'll have to parse this. If you are storing
the parts you've read so far in a variable, the offset would be the
length of the stored variable, for example.
Jacqueline Landman Gay | jacque at hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
More information about the use-livecode