2013-04-16 6 views
6

मैं एक बैश स्क्रिप्ट लिख रहा हूं जिसे क्रॉन से बुलाया जाएगा।एक बैश स्क्रिप्ट से मूर्ख पाइथन की os.isatty

बैश स्क्रिप्ट एक पायथन कमांड चलाती है जो pythons os.isatty function का उपयोग कर टर्मिनल में होती है और यह अलग-अलग चीजों को आउटपुट करती है, भले ही यह मैन्युअल रूप से या क्रॉन के माध्यम से चलती है। यह डीबगिंग को बहुत कठिन बना रहा है और मैं इसे बनाना चाहता हूं ताकि यह हमेशा मान ले कि यह एक टीटीवी में नहीं है।

मैं पाइथन स्क्रिप्ट को मूर्ख बनाने के लिए बैश स्क्रिप्ट में कुछ जोड़ना चाहता हूं कि यह टर्मिनल में नहीं चल रहा है और इसलिए हमेशा एक ही चीज़ आउटपुट करता है।

पुष्टि करने के लिए, मेरे पास बैश स्क्रिप्ट का नियंत्रण है लेकिन पाइथन को संपादित नहीं करना चाहते क्योंकि यह एक पैक किया गया ऐप है।

कोई विचार?

मुझे उम्मीद है कि यह समझ में आया।

अग्रिम में बहुत बहुत धन्यवाद।

+0

स्पष्ट करने के लिए: यदि आप स्क्रिप्ट "लगता है कि" करने के लिए है कि यह _is_ एक tty के साथ या कि यह _is not_ चल चाहते हैं एक के साथ चल रहा है? –

+0

बस एक बार आइसटी को कॉल करें और इसे कुछ वैश्विक रूप से सुलभ जगह में स्टोर करें ... अब आप केवल अपना मूल्य सही या गलत सेट कर सकते हैं ... यदि आप ओएसिसैटी को उस जगह पर कर रहे हैं जो संभवत: –

+0

एक्सपी: I 'स्क्रिप्ट' को "सोचने" की तरह है कि यह एक TTY – Dogsbody

उत्तर

5

आप आउटपुट को cat पर रीडायरेक्ट कर सकते हैं (स्क्रिप्ट परीक्षण sys.stdout की फ़ाइल डिस्क्रिप्टर atty -ness) मानते हैं।

python myscript.py | cat 

a.py

import sys 
print sys.stdout.isatty() 
परीक्षण करने के लिए

:

> python a.py 
True 
> python a.py | cat 
False 
+3

शानदार! यह एक आकर्षण की तरह काम करता है। धन्यवाद :-) – Dogsbody

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