Hi Jannik, One other thing I just thought of: Check and see if your rostopic program is actually writing to standard output, as opposed to writing directly to /dev/tty. From a terminal window, I think you could do this:
$ rostopic > out.txt If you run this get output written to the out.txt file, that is good. If you run it and see output to your terminal window, it would mean that the rostopic program was writing directly to /dev/tty (so there would never be any output to read with a PipeableOSProcess). I would not worry about the missing AioPlugin. Your code should still work without the plugin. Dave > Hi Dave, > > 2015-02-25 1:13 GMT+01:00 David T. Lewis <le...@mail.msen.com>: > >> On Tue, Feb 24, 2015 at 08:33:41PM +0100, jannik laval wrote: >> > Hi pharoers, >> > >> > I am playing with OSProcess. >> > I am using an example, and I am annoyed with a strange bug: >> > >> > Here is the code I want to execute, and does not work: >> > ==== >> > |thread process output| >> > myCmd := 'rostopic bw /turtle1/pose'. >> > thread := [process := (PipeableOSProcess command: myCmd) ] fork. >> > 3 second wait. >> > output := process upToEnd. >> > output inspect. >> > thread terminate. >> > === >> >> Hi Jannik, >> >> I am not familiar with the rostopic command, but it is common for some >> Unix programs to flush their output when the stdout is connected to >> /dev/tty (a terminal), but not necessarily if connected to a pipe or >> to a file. So it may be that the running rostopic program is producing >> output, but that the output has not yet been flushed to the pipe >> connected >> to your PipeableOSProcess. >> > > Thank you for your explanation. > So, what I can do is to send a sigint to terminate the process and receive > the info. > But sending "process processProxy sigint." does nothing. > > By the way I have a warning on the AIOPlugin... Probably I should > reinstall > my VM. > > I also try "process flush", but it does not do anything. > > > >> >> Your #upToEnd call will read the available data from the OS pipe, but it >> will not read data that was "written" by the rotopic program, but not >> yet flushed out to the OSPipe. So I am guessing that this may be why the >> data seems to be missing. >> >> I notice also that you are putting your PipeableOSProcess into a >> separate >> Smalltalk process using #fork. This is probably not necessary, so try >> getting rid of the #fork and the later thread terminate. It will not fix >> the problem for you, but it will simplify the code. >> > > > Ok, it is simpler like that. You are right, it does not help :) > > Thank you for your help. > > >> >> Dave >> >> >> > >> > 'rostopic bw /turtle1/pose' is a command that is a loop displaying the >> > current bandwidth of a ROS process. In a terminal, it works fine. With >> > OSProcess the output value is empty. >> > >> > My source code is correct: if I replace myCmd by : >> > myCmd := 'ping localhost'. >> > >> > It is a loop too, and it returns a correct string. >> > >> > I have clearly no idea of where I have to search... Any help or >> discussion >> > about that would be great :) >> > >> > Thank you, >> > >> > Oups, some infos: >> > I am using Ubuntu 14.04 >> > Pharo3.0 with Moose 5.0, latest update: #30863 >> > The script I use (rostopic) is a python script (does it impact ?) >> > >> > >> > -- >> > >> > ~~Jannik Laval~~ >> > ??cole des Mines de Douai >> > Enseignant-chercheur >> > http://www.jannik-laval.eu >> > http://www.phratch.com >> > http://www.approchealpes.info >> > http://car.mines-douai.fr/ >> >> > > > -- > > ~~Jannik Laval~~ > Ãcole des Mines de Douai > Enseignant-chercheur > http://www.jannik-laval.eu > http://www.phratch.com > http://www.approchealpes.info > http://car.mines-douai.fr/ >