Как отделить вывод командной строки (обработка от взаимодействия с пользователем) в Unix? - PullRequest
2 голосов
/ 05 марта 2011

Я пишу консольное приложение, в котором может потребоваться взаимодействие с пользователем (запрос ввода с клавиатуры, аргументы cli и т. Д.), Но я хочу отделить его от результата обработки (который идет в cout, в способ, которым это может быть передано другому приложению).

Как мне этого добиться, если я не могу просто отправить все взаимодействия с пользователем в cerr (не все является ошибкой)?

Ответы [ 3 ]

3 голосов
/ 05 марта 2011

/dev/tty является обычным способом, но также возможно в большинстве Unix-подобных операционных систем читать из cerr / stderr, потому что система обычно открывает tty один раз как stdin и dup() s на stdout и stderr.

1 голос
/ 05 марта 2011

Если вам нужно взаимодействие с пользователем, откройте / dev / tty, это будет управляющий терминал для процесса.Стандартная ошибка и стандартный ввод также могут быть перенаправлены.

1 голос
/ 05 марта 2011

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

...