Как я могу определить, выполняется ли мой процесс в интерактивном режиме?
Существует ли стандартный (ish) способ POSIX для определения того, выполняется ли мой процесс (я сейчас пишу это как скрипт Ruby; но мне любопытно, что несколько сред, включая Node.js и приложения командной строки ISO C) запускать в интерактивном терминале, в отличие, скажем, cron, или выполнение из другого инструмента, или… и так далее, и так далее.
В частности, мне нужно получить пользовательский ввод в определенных ситуациях, и мне нужно фатально потерпеть неудачу, если это определенно невозможно (т. Е. Выполняется cron.) Я могу сделать это с помощью переменной окружения, но я бы предпочел что-то более стандартное. иш, если смогу
3 ответа
Я всегда использовал $stdout.isatty
чтобы проверить это. Другие подходы могут включать проверку значения ENV['TERM']
или используя драгоценный камень ruby-terminfo.
Как @Mitch написал это в комментарии, что также может быть полезно для некоторых людей:
Для тех, кто пришел сюда в поисках окон, попробуйте
System.Environment.UserInteractive
для.Net илиGetUserObjectInformation
для win32, которая не работает для неинтерактивных процессов