2011-10-24 26 views
9

मेरे पास एक wypypython जीयूआई और कुछ कमांड लाइन पैरामीटर के साथ एक पायथन प्रोग्राम है। मैं py2exe के साथ एक एकल विंडोज निष्पादन योग्य उत्पन्न करता हूं। मैं पृष्ठभूमि में कमांड लाइन विंडो नहीं चाहता हूं, इसलिए py2exe इस विंडो के बिना इसे एक पायथन निष्पादन योग्य बना रहा है। यह * .pyw एक्सटेंशन का उपयोग करने के बराबर है।.pyw एक्सटेंशन के साथ पायथन स्क्रिप्ट से stdout पर प्रिंट कैसे करें?

समस्या यह है कि, यदि आप उपलब्ध कमांड लाइन तर्क देखना चाहते हैं, तो आप स्वाभाविक रूप से एक खोल पर "main.exe -h" करते हैं। हालांकि Argparse यह जानकारी प्रदान कर रहा है, यह * .pyw एक्सटेंशन की वजह से stdout तक नहीं पहुंचता है।

तो मैं pythonw का उपयोग कर एक जीयूआई अनुप्रयोग के लिए stdout कैसे पुनः सक्षम कर सकता हूं?

न्यूनतम काम कर रहे उदाहरण:

# test.py 
print "hello" 

निष्पादन:

#> python test.py 
hello 
#> pythonw test.py 
#> 

कोई सुझाव के लिए अग्रिम धन्यवाद!

+1

संबंधित: [विंडोज जीयूआई + कंसोल आउटपुट, लिनक्स-शैली] (http://stackoverflow.com/questions/6673022/windows-gui-console-output-linux-style) – jfs

उत्तर

0

मैं अंत में एक बुरा चाल के कुछ प्रकार के साथ मेरी समस्या हल। मुझे argparse से सहायता जानकारी मिलती है जैसे:

class Parser(object): 
    def __init__(self): 
     [...init argparser...] 
     self.help = "" 
     self.__argparser.print_help(self) 
    def write(self, message): 
     self.help += message 

तब मैं केवल संवाद में सहायता जानकारी दिखाता हूं।

मैं अभी भी sys.stdout को फिर से सक्षम करना पसंद करूंगा, लेकिन यह अभी के लिए काम करता है। सभी सुझावों के लिए धन्यवाद!

3

एक तरीका मैंने यह किया है, एक निश्चित कमांड लाइन स्विच मौजूद होने पर sys.stdout को फ़ाइल में रीडायरेक्ट करने के लिए py2exe के custom-boot-script का उपयोग करें।

जब मैं इसे खोद सकता हूं तो मेरे पास कुछ नमूना कोड होगा, लेकिन शुरू करने के लिए लिंक देखें।

+0

धन्यवाद, लेकिन मैं प्राप्त करना पसंद करूंगा कमांड लाइन पर 'sys.stdout' वापस। क्या आपके पास कोई विचार है कि ऐसा कैसे करें? दुर्भाग्यवश, –

+1

दुर्भाग्यवश, मुझे नहीं लगता कि आप ऐसा कर सकते हैं, क्योंकि कंसोल सबसिस्टम को .pyw फ़ाइलों के साथ प्रारंभ नहीं किया गया है। Win32 API AllocConsole कॉल के साथ आपको कुछ कचरा सामान करना होगा ताकि आपके स्टडआउट को कंसोल विंडो पर वापस प्राप्त किया जा सके। – rossipedia

1

आप भी रेक्सप्रेस के लिए wxPython ऐप इंस्टेंस को बता सकते हैं। बस सही पर "redirect" पैरामीटर सेट:

app = wx.App(True) 

एक अन्य समाधान के बजाय stdout के लिए मुद्रण तार पर भरोसा करने की अजगर की लॉगिंग मॉड्यूल का उपयोग करने के लिए किया जाएगा। इसका उपयोग करके, आप किसी फ़ाइल या विभिन्न वेब प्रोटोकॉल पर लॉग इन कर सकते हैं। पूरी जानकारी के लिए दस्तावेज़ देखें: http://docs.python.org/library/logging.html

वहाँ भी एक अच्छा परिचयात्मक ट्यूटोरियल यहाँ है: http://www.doughellmann.com/PyMOTW/logging/