Вывод, показанный в окне xterm (или, вероятно, других терминалах), не будет прочитан popen
, поэтому эта часть неясна. Однако вы говорите, что работает из окна терминала.
Другая проблема заключается в том, что переменная DISPLAY
, необходимая для запуска xterm, может быть не установлена в среде, в которой работает средство поиска. Вы можете обойти это, добавив подходящий параметр -display
в командную строку. Например, если ваше приложение работает и отображается на локальном компьютере (вероятно), вы можете попробовать
popen("xterm -display :0.0 -e ' some bash script ' ","r");
При захвате вывода из xterm следует учитывать два типа вывода:
- сообщения об ошибках от самого xterm записываются в стандартную ошибку
- программа, работающая внутри xterm, например,
'some bash script'
, будет писать в окно xterm.
В вашем примере вы можете захватить сообщения об ошибках в канале (напрямую из popen
, перенаправив стандартную ошибку в команде на стандартный вывод xterm, например,
popen("xterm -display :0.0 -e ' some bash script ' 2>&1 ","r");
Захват вывода скрипта bash сложнее. Вы можете перенаправить вывод самого скрипта bash, например,
popen("xterm -display :0.0 -e ' some bash script >mylogfile ' ","r");
но это мешает общению. Лучшим решением может быть использование программы script
, которая делает что-то вроде этого:
popen("xterm -display :0.0 -e script mylogfile ' some bash script ' ","r");
person
Thomas Dickey
schedule
14.04.2015