2010-08-02 16 views
12

¿Existe una forma POSIX estándar (ish) para determinar si mi proceso (estoy escribiendo esto como un script de Ruby ahora, pero tengo curiosidad por múltiples entornos, incluidas las aplicaciones de línea de comandos Node.js y ISO C) se está ejecutando en una terminal interactiva, en lugar de, por ejemplo, cron o ejecución desde otra herramienta, o ... y así sucesivamente.¿Cómo puedo determinar si mi proceso se está ejecutando de forma interactiva?

Específicamente, necesito adquirir la entrada del usuario en determinadas situaciones, y necesito a fallar fatalmente si es determinable no poder (es decir, siendo dirigido por cron.) Puedo hacer esto con una variable de entorno, pero me prefiero algo más estándar, si puedo.

+2

Para cualquiera que haya venido buscando Windows, pruebe System.Environment.UserInteractive para .Net o GetUserObjectInformation para win32, que fallará en los procesos no interactivos. – Mitch

+0

Podrías haber agregado eso como una respuesta real y obtener reputación de él. (= – ELLIOTTCABLE

Respuesta

13

Siempre he usado $stdout.isatty para verificar esto. Otros enfoques pueden incluir verificar el valor de ENV['TERM'] o utilizar la gema ruby-terminfo.

+1

'isatty' parece ser parte de la clase de Ruby IO: http://ruby-doc.org/core-2.2.2/IO.html#method-i-isatty – akostadinov

4

Lo más cerca que obtendrá, AFAIK, es isatty(). Pero como dice la página, nada garantiza que un humano esté controlando la terminal.

Cuestiones relacionadas