2010-08-02 14 views
12

Esiste un modo standard (ish) POSIX per determinare se il mio processo (sto scrivendo questo come uno script Ruby in questo momento, ma sono curioso per più ambienti, incluse le applicazioni della riga di comando Node.js e ISO C) viene eseguito in un terminale interattivo, al contrario di, cron, o esecuzione da un altro strumento, o ... così via e così via.Come posso determinare se il mio processo viene eseguito in modo interattivo?

particolare, devo acquisire input dell'utente in certe situazioni, e devo sicuro fatalmente se questo è determinably impossibile (cioè essendo gestita da cron.) Posso fare questo con una variabile ambiente, ma sono Preferisco qualcosa di più standard, se posso.

+2

Per chi è venuto qui in cerca di Windows, prova System.Environment.UserInteractive per .Net o GetUserObjectInformation per win32, che fallirà per i processi non interattivi. – Mitch

+0

Potresti averlo aggiunto come risposta reale e ottenuto la reputazione da esso. (= – ELLIOTTCABLE

risposta

13

Ho sempre utilizzato $stdout.isatty per verificare questo. Altri approcci potrebbero includere il controllo del valore di ENV['TERM'] o l'utilizzo della gemma ruby-terminfo.

+1

'isatty' sembra essere parte della classe IO ruby: http://ruby-doc.org/core-2.2.2/IO.html#method-i-isatty – akostadinov

4

Il più vicino possibile, AFAIK, è isatty(). Ma come dice la pagina stessa, nulla garantisce che un essere umano stia controllando il terminale.

Problemi correlati