2011-10-24 37 views
9

Tôi có một chương trình python với GUI wxpython và một số tham số dòng lệnh. Tôi tạo ra một cửa sổ duy nhất thực thi với py2exe. Tôi không muốn có một cửa sổ dòng lệnh trong nền, vì vậy py2exe là làm cho một pythonw thực thi mà không có cửa sổ này. Điều này tương đương với việc sử dụng phần mở rộng * .pyw.Làm cách nào để in ra stdout từ tập lệnh Python bằng phần mở rộng .pyw?

Vấn đề là, nếu bạn muốn xem các đối số dòng lệnh có sẵn, bạn tự nhiên làm "main.exe -h" trên trình bao. Mặc dù argparse đang cung cấp thông tin này, nhưng nó không đạt được stdout vì phần mở rộng * .pyw.

Vậy làm cách nào tôi có thể kích hoạt lại chế độ stdout cho ứng dụng GUI bằng pythonw?

tối thiểu dụ làm việc:

# test.py 
print "hello" 

thực hiện:

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

Cảm ơn trước cho bất cứ đề nghị!

+1

liên quan: [Windows GUI + Giao diện điều khiển, kiểu Linux] (http://stackoverflow.com/questions/6673022/windows-gui-console-output-linux-style) – jfs

Trả lời

0

cuối cùng tôi giải quyết vấn đề của tôi với một số loại một thủ thuật khó chịu. Tôi nhận được thông tin trợ giúp từ argparse như sau:

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

Sau đó, tôi chỉ hiển thị thông tin trợ giúp trong hộp thoại giới thiệu.

Tôi vẫn muốn bật lại sys.stdout, nhưng tính năng này hoạt động ngay bây giờ. Nhờ tất cả các đề xuất!

3

Một cách tôi đã thực hiện việc này là sử dụng custom-boot-script của py2exe để chuyển hướng sys.stdout đến tệp khi có chuyển đổi dòng lệnh nhất định.

Tôi sẽ có một số mã mẫu ở đây khi tôi có thể khai thác nó, nhưng hãy kiểm tra liên kết để giúp bạn bắt đầu.

+0

Cảm ơn, nhưng tôi muốn nhận 'sys.stdout' trở lại trên dòng lệnh. Bạn có một ý tưởng làm thế nào để làm điều đó? –

+1

Thật không may, tôi không nghĩ rằng bạn có thể làm điều đó, kể từ khi hệ thống phụ Console không được khởi tạo với các tệp .pyw. Bạn sẽ phải làm một số công cụ khó chịu với các cuộc gọi API Win32 AllocConsole để có được stdout của bạn trở lại một cửa sổ giao diện điều khiển. – rossipedia

1

Bạn cũng có thể yêu cầu phiên bản ứng dụng của wxPython để chuyển hướng. Chỉ cần đặt thông số "chuyển hướng" thành True:

app = wx.App(True) 

Một giải pháp khác là sử dụng mô-đun ghi nhật ký của Python thay vì dựa vào chuỗi in. Bằng cách đó, bạn có thể đăng nhập vào một tập tin hoặc các giao thức web khác nhau. Xem tài liệu để biết chi tiết đầy đủ: http://docs.python.org/library/logging.html

Ngoài ra còn có một giới thiệu tốt hướng dẫn ở đây: http://www.doughellmann.com/PyMOTW/logging/

Các vấn đề liên quan