2009-10-03 19 views
12

पर हस्ताक्षर किया गया है, मैंने देखा है कि कर्ल बता सकता है कि मैं इसके आउटपुट को रीडायरेक्ट कर रहा हूं या नहीं (जिस स्थिति में यह प्रगति पट्टी रखता है)।यह निर्धारित करना कि पाइथन प्रक्रिया के लिए stdout

क्या कोई पाइथन लिपि में ऐसा करने का कोई उचित तरीका है? तो:

$ अजगर my_script.py
पुनः निर्देशित नहीं

$ अजगर my_script.py> output.txt
रीडायरेक्ट!

उत्तर

7

असल में, आप यहाँ क्या करना चाहते हैं क्या पता लगाना यदि stdin और stdout हैं वही चीज।

$ cat test.py 
import os 
print os.fstat(0) == os.fstat(1) 
$ python test.py 
True 
$ python test.py > f 
$ cat f 
False 
$ 

अब लेकिन अधिक परंपरागत के संस्करण वे कर रहे हैं एक ही फाइल परीक्षण सिर्फ st_ino और st_dev तुलना करती है। आम तौर पर, खिड़कियों पर इन्हें किसी चीज के हैश के साथ फिक्र किया जाता है ताकि यह सटीक डिज़ाइन पैटर्न काम करेगा।

+0

चूंकि यह विंडोज़ पर काम करता है, मुझे लगता है कि यह वही है जो मैं चाहता हूं। ध्यान दें कि यह दृष्टिकोण * काम नहीं करेगा * अगर मैं करता हूं: $ echo "blah" | पायथन test.py –

4

देखो पर

os.isatty(fd) 

(मैं इस विंडोज पर काम करता है नहीं लगता कि हालांकि,)

28
import sys 

if sys.stdout.isatty(): 
    print "Not redirected" 
else: 
    sys.stderr.write("Redirected!\n") 
+0

विंडोज पर एक पकड़ है: यदि एक स्ट्रीम को नल पर रीडायरेक्ट किया जाता है, तो 'isatty' अभी भी सत्य लौटाता है। – user87690

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