2010-08-02 2 views
12

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

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

+2

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

+0

Вы могли бы добавить это как реальный ответ и получить репутацию от него. (= – ELLIOTTCABLE

ответ

13

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

+1

'isatty', похоже, входит в класс рубинов IO: http://ruby-doc.org/core-2.2.2/IO.html#method-i-isatty – akostadinov

4

Ближе всего вы получите AFAIK, это isatty(). Но, как говорит сама страница, ничто не гарантирует, что человек контролирует терминал.

Смежные вопросы