2010-08-02 13 views
12

क्या यह निर्धारित करने का एक मानक (आईएसएच) पॉज़िक्स तरीका है कि मेरी प्रक्रिया (मैं इसे अभी रूबी स्क्रिप्ट के रूप में लिख रहा हूं; लेकिन मैं कई वातावरणों के लिए उत्सुक हूं, जिसमें नोड.जेएस और आईएसओ सी कमांड लाइन अनुप्रयोग शामिल हैं) एक इंटरैक्टिव टर्मिनल में चलाया जा रहा है, जैसा कि कहता है, क्रॉन, या किसी अन्य उपकरण से निष्पादन, या ... इतने पर और आगे।मैं कैसे निर्धारित कर सकता हूं कि मेरी प्रक्रिया पारस्परिक रूप से चल रही है या नहीं?

विशेष रूप से, मैं कुछ स्थितियों में उपयोगकर्ता इनपुट प्राप्त करने के लिए की जरूरत है, और मैं घातक रूप से विफल है कि अगर determinably है की जरूरत है संभव नहीं (यानी क्रॉन द्वारा चलाए जा।) मैं एक वातावरण चर के साथ ऐसा कर सकते हैं, लेकिन मैं डी कुछ और मानक-आश पसंद करते हैं, अगर मैं कर सकता हूं।

+2

यहां आने वाले किसी भी व्यक्ति के लिए विंडोज़ की तलाश में, Win32 के लिए .NET या GetUserObjectInformation के लिए System.Environment.UserInteractive को आजमाएं, जो गैर-इंटरैक्टिव प्रक्रियाओं के लिए विफल हो जाएगा। – Mitch

+0

आप इसे एक वास्तविक उत्तर के रूप में जोड़ सकते थे, और इससे प्रतिष्ठा प्राप्त की। (= – ELLIOTTCABLE

उत्तर

13

मैंने हमेशा यह देखने के लिए $stdout.isatty का उपयोग किया है। अन्य दृष्टिकोणों में ENV['TERM'] के मूल्य की जांच करना या ruby-terminfo मणि का उपयोग करना शामिल हो सकता है।

+1

'isatty' रूबी आईओ कक्षा का हिस्सा प्रतीत होता है: http://ruby-doc.org/core-2.2.2/IO.html#method-i-isatty – akostadinov

4

निकटतम आप पाएंगे, AFAIK, isatty() है। लेकिन जैसा कि पृष्ठ स्वयं कहता है, कुछ भी गारंटी नहीं देता है कि एक मानव टर्मिनल को नियंत्रित कर रहा है।

संबंधित मुद्दे

 संबंधित मुद्दे