On Tue, Jun 11, 2013 at 10:34:47PM -0700, Sean P. DeNigris wrote: > When using PipeableOSProcess as a shell, how can I get feedback on the status > of the individual commands? > > For example, with waitForCommand:, I can do: > p := PipeableOSProcess waitForCommand: 'curl -L largeFile'. > p succeeded ifFalse: [ ^ self error: 'Could not dowload...' ]. > > but a the shell like: > shell := PipeableOSProcess bash. > shell exec: ('cd ', folderName). > shell exec: 'curl -L largeFile...'. > what's the equivalent of #succeeded? If there's no clear external sign that > the command is finished, how do I check? Also, I don't seem to get anything > back on the error stream e.g. if I change curl to cul, which doesn't exist, > I still get an empty string from #errorUpToEnd. >
When you run a Unix shell (bash) in a pipeable proxy, you can talk to the shell by reading and writing to the proxy. A Unix shell keeps track of the exit status of the last program that it ran in a shell variable ($?), so you can ask the shell for that exit status. This should give you a few ideas: shell := PipeableOSProcess bash. "Run a bash shell in a pipeable proxy" shell pipeFromOutput reader setNonBlocking. "Do not block the VM on reads" shell exec: 'cd ..'. "Write a command to shell input with a line terminator" shell exec: 'ls'. "Write another command to bash" (Delay forMilliseconds: 200) wait. "Wait for output to arrive" shell upToEnd inspect. "Read from bash shell output" shell exec: 'echo $?'. "Ask bash shell for exit status of the last command". (Delay forMilliseconds: 100) wait. shell upToEnd inspect. shell close. "Do not leave open file handles from pipes" PipeableOSProcess is designed to be part of CommandShell, so when you use it directly (rather than using a CommandShell), you need to take care of a few details. The important things are to set the output pipe for nonblocking reads (otherwise you will hang up your VM on a read), and to close pipes when you are done using them (otherwise you will "leak" file handles over time). Dave _______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners