2012-12-20 59 views
7

मुझे एक पाइथन लिपि मिली है जो stdin पर इनपुट लेती है। मैं इस तरह, IPython.embed() में छोड़ करना चाहते हैं:मैं स्क्रिप्ट को डीबग कैसे करूं जो ipython के साथ stdin का उपयोग करता है?

for filepath in sys.stdin: 
    dir = os.path.basename(filepath) 
    ... 
    IPython.embed() 

मैं तो इस तरह स्क्रिप्ट आह्वान:

find . -type f | thescript.py 

समस्या यह है कि IPython इंटरैक्टिव कंसोल के लिए stdin का उपयोग करता है, तो पहली चीज जो यह देखती है वह शेष पाइप डेटा है। फिर, पाइप बंद हो जाता है और टर्मिनल निकलता है।

क्या ऐसी स्क्रिप्ट को डीबग करने का कोई तरीका है जो ipython के साथ stdin का उपयोग करता है?

उत्तर

5

आपको सबसे पहले एक सूची में अपने stdin इनपुट पढ़ सकता है, तो stdin रीसेट: (! और यह काम करता)

stdin_list = list(sys.stdin) 
sys.stdin = open('/dev/tty') 
for filepath in stdin_list: 
    dir = os.path.basename(filepath) 
    ... 
    IPython.embed() 
+0

कि प्यारा है। – Reece