Как открыть Xterm на OSX из приложения C ++?

Я сделаю это:

popen("xterm -e ' some bash script ' ","r");

и это работает нормально, если я запускаю свое приложение из командной строки терминала.
но если я дважды щелкну в поисковике, чтобы запустить его (т.е. не в терминале), приложение запустится, но xterm не появится.

(xterm, возможно, не является правильным решением для osx, я хочу открыть терминал из popen, взаимодействовать с пользователем внутри терминала и вернуть результат этого взаимодействия в основную программу)

0

Решение

Вывод, показанный в окне xterm (или, вероятно, других терминалах), не будет прочитан popen, так что эта часть неясна. Тем не менее, вы говорите, что работает из окна терминала.

Другая проблема заключается в том, что DISPLAY переменная, необходимая для запуска xterm, не может быть установлена ​​в среде, в которой работает finder. Вы можете обойти тот добавив подходящий -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");
0

Другие решения


По вопросам рекламы [email protected]