Hello everyone. Thank you Juampi & Ben for your answers. This is the final working code, made with Johan's help:
* | process output thread |* * thread := [process := (PipeableOSProcess command: 'rostopic echo /turtle1/cmd_vel __name:=echo2') ] fork. * * (Delay forSeconds:3) wait.* * (OSProcess command: 'rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- ''[3.0, 0.0, 0.0]'' ''[0.0, 0.0, 1.5]'' ').* * (Delay forSeconds:3) wait.* * output := process upToEnd.* Now we have everything in output. It only remains to kill the thread now. Thank you all for the help! El Tue Jan 13 2015 at 5:53:26 PM, Juan Pablo Sandoval Alcocer < juampi...@gmail.com> escribió: > Hi Demian, > > I am not sure if I understood well your questions, but maybe you can try > something like: > > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= > MyWriteStream>>nextPutAll: content > Transcript show: content. > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- > > and then execute: > > [(PipeableOSProcess command:'sh /Users/jsandova/workspace/test.sh') > outputOn: (MyWriteStream with: Array new)] fork. > > Regards, > Juampi > > 2015-01-13 12:47 GMT-03:00 Ben Coman <b...@openinworld.com>: > > So you mean 'rostopic echo' and 'rostopic pub' ? So its a >> publisher/subscriber model with 'echo' as the subscriber ? >> >> (I'll needs others to confirm this is possible but...) the way to go may >> be to fork 'rotopic echo' and leave it running, parsing its results into a >> queue that some other part of your program consumes. >> >> To simplify this to check feasibility, I'd start with a single shell >> script outputting text at intervals like this... >> "test.sh" >> for VARIABLE in 1 2 3 4 5 .. N >> do >> echo $VARIABLE >> sleep 2 >> done >> >> >> and in Pharo, assuming you can process the output stream asynchronously, >> every time you receive a newline, open an inspector showing the line just >> received. But sorry I don't know *PipeableOSProcess enough to know how.* >> >> *cheers -ben* >> >> >> On Tue, Jan 13, 2015 at 11:05 PM, Demian Schkolnik < >> demianschkol...@gmail.com> wrote: >> >>> It is actually not a native linux command, but rather something >>> belonging to ROS (Robot Robot Operating System). I did not want to >>> complicate the question further.. The behaviour is as I described it. This >>> echo command sits still in the console where it was called, and waits. When >>> some message is send, then it just prints the message on screen and waits. >>> The pub method (also belonging to ROS) publishes a message and exits. >>> I tried Ben's solution (thanks!), but unfortunately stringVar remains >>> nil. I think the problem is we are assigning the output of the command to >>> stringVar, which is nothing, at the moment. >>> Any ideas? >>> Thank you all. >>> >>> El Tue Jan 13 2015 at 6:15:01, Ben Coman <b...@openinworld.com> escribió: >>> >>> I've never known 'echo' to wait for input, and haven't heard of this >>>> echo & pub combination. Do you have some link to a tutorial showing how >>>> they are used? >>>> >>>> However just wildly guessing, are you wanting to get output from a long >>>> running command without blocking the Pharo UI? >>>> In that case, what about... >>>> [ *stringVar := (PipeableOSProcess command: 'echo...') output ] >>>> fork. * >>>> *?* >>>> *cheers -ben* >>>> >>>> On Tue, Jan 13, 2015 at 9:18 AM, Demian Schkolnik < >>>> demianschkol...@gmail.com> wrote: >>>> >>>>> Hello everyone. >>>>> >>>>> I have the following question. I have a specific 'echo ...' command, >>>>> which I send to the linux console via " OSProcess command:'echo ... ' ". >>>>> This echo command, when executed on the native linux console, stands >>>>> by until it receives some message. >>>>> Following this, I have to execute a 'pub...' command, which gives some >>>>> information that the echo command will print on screen. On linux, you run >>>>> 'echo..' on a terminal and 'pub...' on another. >>>>> My objective here is to capture the output of echo into a smalltalk >>>>> variable for later use. >>>>> Normally, if a console command prints something immediately to screen, >>>>> I use >>>>> *(PipeableOSProcess command:'some command') output.* >>>>> >>>>> It is here a little different though, since this command will not >>>>> print something immediately to screen. I want to do something like this, >>>>> where the final output of 'echo..' stays in stringVar. >>>>> >>>>> *stringVar := (PipeableOSProcess command: 'echo...') output. * >>>>> *(Delay forSeconds:3) wait.* >>>>> *(OSProcess command: 'pub... ').* >>>>> *(Delay forSeconds:3) wait.* >>>>> >>>>> Thank you all. >>>>> >>>>> >>>>> >>>>> >>>> >> > > > -- > Saludos, > Juan Pablo >