Как я могу определить, выполняется ли мой процесс в интерактивном режиме? - PullRequest
13 голосов
/ 02 августа 2010

Существует ли стандартный (ish) способ POSIX, чтобы определить, является ли мой процесс (я сейчас пишу это как скрипт Ruby; но мне любопытно, что такое несколько сред, включая Node.js и приложения командной строки ISO C)) выполняется в интерактивном терминале, в отличие от, скажем, cron, или выполнения из другого инструмента, или… и т. д. и т. п.

В частности, мне нужно получить пользовательский ввод в определенных ситуациях, иМне нужно потерпеть неудачу, если это определенно невозможно (т. Е. Выполняется cron.) Я могу сделать это с помощью переменной окружения, но я бы предпочел что-то более стандартное, если смогу.

Ответы [ 3 ]

16 голосов
/ 03 августа 2010

Я всегда использовал $stdout.isatty, чтобы проверить это. Другие подходы могут включать проверку значения ENV['TERM'] или использование ruby-terminfo gem.

4 голосов
/ 02 августа 2010

Ближайшее, AFAIK, значение: isatty () .Но, как говорит сама страница, ничто не гарантирует, что человек управляет терминалом.

0 голосов
/ 26 марта 2018

Как @Mitch написал это в комментарии, что также может быть полезно для некоторых людей:

Для тех, кто пришел сюда в поисках окон, попробуйте System.Environment.UserInteractive для .Net или GetUserObjectInformationдля win32, которая не работает для неинтерактивных процессов

...