c++ - Linux passing continuous output as command line args -
c++ - Linux passing continuous output as command line args -
i have machine vision programme (./detectupdatehomeml
) continuously outputs name of objects found terminal using next code:
circle( img, center, radius, color, 3, 8, 0 ); if (circle) { std::cout << " " << cascadename << " " << timefound() << endl; std::cout << std::flush; } int timefound() { time_t rawtime; struct tm * timeinfo; char buffer [80]; time (&rawtime); timeinfo = localtime (&rawtime); strftime (buffer,80," %y-%m-%dt%h:%m:%s",timeinfo); std:cout << (buffer); eventcount++; }
i looking send input command line arguments sec programme using back-ticks capture output , send other programme so:
./acceptinput `./detectupdatehomeml`
however arguments don't seem getting passed ./acceptinput
.
i have test programme called ./testinput
prints hello world!
so:
std::cout << "hello world!";
when using same command:
./acceptinput `./testinput`
the programme works , outputs expected:
there 3 arguments: 0 ./acceptinput 1 hello 2 world!
what going wrong when seek pass continuous output ./detectupdatehomeml
./acceptinput
program?
it looks detectupdatehomeml
produces events want handle acceptinput
. in case, have slight mismatch in info flow can resolve xargs
, so:
./detectupdatehomeml | xargs -n2 ./acceptinput
when executing programme arguments, parent process (for illustration bash
) needs know how many arguments there before starting execution, when do
./acceptinput `./detectupdatehomeml`
bash
must wait until detectupdatehomeml
has finished running before starting acceptinput
.
in order utilize output detectupdatehomeml
while still running, utilize pipes:
./detectupdatehomeml | ...
this redirect output detectupdatehomeml
standard input of program.
xargs
accepts space-separated text in input , executes subprocesses giving text arguments. utilize -n
decide how many arguments passed each time, illustration 2
:
./detectupdatehomeml | xargs -n2 ...
xargs
takes name of subprocess execute:
./detectupdatehomeml | xargs -n2 ./acceptinput
now, every time detectupdatehomeml
generates 2 items of output, acceptinput
executed these 2 arguments.
this allow run detectupdatehomeml
continuously while acceptinput
executed every time detectupdatehomeml
has generated sufficient output. should solve problem.
c++ linux shell command-line-arguments
Comments
Post a Comment