2011-10-24 16 views
9

Bir wxpython GUI ve bazı komut satırı parametreleriyle bir python programım var. Py2exe ile tek bir windows yürütülebilir. Arka planda bir komut satırı penceresi olmasını istemiyorum, bu yüzden py2exe bu pencereden bir pythonw çalıştırılabilir. Bu, * .pyw uzantısının kullanılmasıyla eşdeğerdir.Python betiğinden .pyw uzantılı stdout nasıl yazdırılır?

Sorun şu ki, kullanılabilir komut satırı bağımsız değişkenlerini görmek istiyorsanız, bir kabuk üzerinde "main.exe -h" ifadesini kullanıyorsunuz. Argparse bu bilgiyi sağlamasına rağmen, * .pyw uzantısı nedeniyle stdout'a ulaşmaz.

Pythonw kullanarak bir GUI uygulaması için stdout'u nasıl yeniden etkinleştirebilirim?

asgari çalışma örneği:

# test.py 
print "hello" 

yürütme: Herhangi öneri için şimdiden

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

teşekkürler!

+1

ilgili: [Windows GUI + Konsol Çıktısı, Linux stili] (http://stackoverflow.com/questions/6673022/windows-gui-console-output-linux-style) – jfs

cevap

0

Sonunda kötü bir hile çeşit ilgili sorunu da hallettim. Ben argparse böyle gelen yardım bilgilerini almak:

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

Sonra hemen iletişim yardım bilgilerini gösterir.

Yine de sys.stdout'u yeniden etkinleştirmeyi tercih ediyorum, ancak bu şimdilik çalışıyor. Tüm önerilere teşekkürler!

3

Bunu yapmanın bir yolu, belirli bir komut satırı anahtarı mevcut olduğunda bir dosyaya sys.stdout yeniden yönlendirmek için py2exe's custom-boot-script'u kullanmaktır.

Buradan kazandığımda bazı örnek kodlarım var, ancak başlamanıza yardımcı olacak bağlantıyı kontrol edin.

+0

Teşekkürler, ama tercih ederim sys.stdout komut satırına geri döndü. Bunu nasıl yapacağınıza dair bir fikriniz var mı? –

+1

Ne yazık ki, Konsol alt sistemi .pyw dosyalarıyla başlatılmadığından, bunu yapabileceğinizi sanmıyorum. Bir konsol penceresine stdout'unuzu geri almak için Win32 API AllocConsole çağrıları ile bazı kötü şeyler yapmak zorunda. – rossipedia

1

wxPython'un Uygulama örneğinin de yeniden yönlendirmesini söyleyebilirsin. Sadece True "yönlendirme" parametresini ayarlayın:

app = wx.App(True) 

Başka bir çözüm yerine Stdout'a baskı dizeleri güvenmek Python'un günlüğü modülünü kullanmak olacaktır. Bunu kullanarak, diğerleri arasında bir dosyaya veya çeşitli web protokollerine giriş yapabilirsiniz. Tüm ayrıntılar için belgelere bakın: Burada da iyi bir tanıtım öğretici var http://docs.python.org/library/logging.html

: http://www.doughellmann.com/PyMOTW/logging/