2010-06-23 16 views
5

का उपयोग कर stdin/stdout के बिना पीडीबी चलाएं मैं पाइथन के साथ FUSE फाइल सिस्टम विकसित कर रहा हूं। समस्या यह है कि फाइल सिस्टम को आरोहित करने के बाद मुझे अपनी फ्यूज स्क्रिप्ट से stdin/stdout/stderr तक कोई पहुंच नहीं है। मुझे कुछ भी नहीं दिख रहा है, यहां तक ​​कि ट्रेसबैक भी। मैं इस तरह पीडीबी लॉन्च करने की कोशिश कर रहा हूं:फीफो

 

import pdb 
pdb.Pdb(None, open('pdb.in', 'r'), open('pdb.out', 'w')).set_trace() 
 

सभी ठीक काम करते हैं लेकिन बहुत असुविधाजनक होते हैं। मैं pdb.in और pdb.out को फीफो फाइलों के रूप में बनाना चाहता हूं लेकिन यह नहीं जानता कि इसे सही तरीके से कैसे कनेक्ट किया जाए। आदर्श रूप में मैं कमांड टाइप करना चाहता हूं और आउटपुट को एक टर्मिनल में देखना चाहता हूं, लेकिन दो टर्मिनलों के साथ भी खुश रहूंगा (एक पुट कमांड में और दूसरे में आउटपुट देखें)। प्रश्न:

1) क्या यह stdin/stdout के बिना पीडीबी चलाने के लिए बेहतर/अन्य तरीका है?

2) मैं stdin को pdb.in फीफो पर रीडायरेक्ट कैसे कर सकता हूं (जो कुछ मैं टाइप करता हूं वह pdb.in पर जाना चाहिए)? मैं pdb.out को stdout पर रीडायरेक्ट कैसे कर सकता हूं (मुझे "बिल्ली pdb.out" के साथ अजीब त्रुटियां थीं लेकिन शायद मुझे कुछ समझ में नहीं आ रहा है)

उत्तर

4

जब pdb, कहा जाता है पृष्ठभूमि

cat pdb.out & cat > pdb.in 

नोट में एक चल रहा है आप इन दो बिल्ली आदेशों का उपयोग कर इसे साथ बातचीत कर सकते ReadLine समर्थन नहीं करता अजगर एप्लिकेशन

mkfifo pdb.in 
mkfifo pdb.out 

फिर शुरू करने से पहले काम (यानी ऊपर तीर)

1

मैं बस एक बहुत ही सरल उपयोग-मामले में एक समान समस्या में भाग गया:

  • कमांड लाइन से चल रहे एक साधारण पायथन प्रोग्राम को डीबग करें जिसमें फ़ाइल को sys.stdin में पाइप किया गया है, जिसका अर्थ है, pdb के लिए कंसोल का उपयोग करने का कोई तरीका नहीं है।

मैंने wdb का उपयोग करके इसे हल किया।

मेरे उपयोग-मामले के लिए त्वरित रंडाउन।

pip install wdb.server wdb 

अब साथ WDB सर्वर का शुभारंभ:

wdb.server.py 

अब आप स्थानीय होस्ट करने के लिए नेविगेट कर सकते हैं: अपने ब्राउज़र के साथ 1984 और एक इंटरफेस को देखने के खोल में, दोनों WDB सर्वर और WDB ग्राहक स्थापित चल रहे सभी पायथन प्रोग्राम सूचीबद्ध। उपरोक्त wdb प्रोजेक्ट पेज में निर्देश हैं कि आप क्या कर सकते हैं यदि आप इनमें से किसी भी चल रहे प्रोग्राम को डीबग करना चाहते हैं।

आपके नियंत्रण में एक कार्यक्रम के रूप में, आप आप इसके साथ शुरू से ही डीबग कर सकते हैं कर सकते हैं:

wdb myscript.py --script=args < and/stdin/redirection 

या, अपने कोड में, आप कर सकते हैं:

import wdb; wdb.set_trace() 

यह पॉप जाएगा अपने ब्राउज़र में एक इंटरफ़ेस (यदि स्थानीय) पता लगाया गया प्रोग्राम दिखा रहा है।

या आप wdb.server पर नेविगेट कर सकते हैं।पाइ पोर्ट को चल रहे पाइथन प्रोग्राम की सूची के शीर्ष पर चल रहे सभी डिबगिंग सत्र देखने के लिए, जिसे आप तब चाहते हैं जो विशिष्ट डिबगिंग सत्र तक पहुंचने के लिए उपयोग कर सकते हैं।

सूचना है कि पता लगाने के दौरान कोड नेविगेट करने के लिए आदेशों मानक pdb से भिन्न क्यों हैं, उदाहरण के लिए, एक समारोह आप .s बजाय s का उपयोग करें और कदम में कदम के लिए खत्म हो .n बजाय n का उपयोग करें। विवरण के लिए ऊपर दिए गए लिंक में wdb रीडमे देखें।

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