Конзолата на Python отпечатва изход по различен начин от конзолата на sypder

Имам код на Python, който взема измервания от HP LCR Meter и събира данните за нас по различни начини. Наскоро създадох GUI за вписване на начални условия за служители, които не се чувстват удобно да променят променливи в кода. Всичко работи с изключение на 1 нещо. НИЕ използваме най-новия python xy, така че python версия 2.6.6 с pyqt и spyder на компютър с Windows 7.

Обикновено отваряме кода в spyder. Но отварянето на spyder отнема известно време и моят ръководител хареса възможността просто да щракне два пъти върху файла, който отваря GUI с прозорец на конзолата на python за отпечатване на грешки и различна информация, както бихте виждали в spyder.

Както може да се види на предоставените екранни снимки, има режим на първоначална настройка на машината за настройка на устройството, което да бъде сканирано от LCR Meter, и има два потребителски входа, които кодът подканва. На spyder отпечатва добре тези подкани в конзолата, но в конзолата на python, отворена без spyder, непрекъснато отпечатва QCoreApplication::exec: The event loop is already running Странното е, че все още можете просто да натиснете enter два пъти по-нормално и кодът ще работи както обикновено. Но това ще бъде объркващо за всички, освен за мен.

Някой знае ли защо това се случва?

Ето снимките на резултата

Ето кода, който подсказва въвеждането.

    lcr = visa.instrument('GPIB::17')
        #clear the instrument
        lcr.write('*RST;*CLS')
        #enable operation complete notification
        lcr.write('*OPC')
        if parallel:
            lcr.write('FUNC:IMP CPG')   #Parallel capacitance, conductance model
        else:
            lcr.write('FUNC:IMP CSRS')   #Series capacitance, resistance model
        lcr.write('APER '+integration+','+averages)
        lcr.write('OUTP:HPOW ON')
        lcr.write('OUTP:DC:ISOL OFF')
        lcr.write('VOLT '+vac)
        lcr.write('TRIG:SOUR BUS')

        if zero == True:
            #set open correction parameters
            lcr.write('DISP:PAGE CSET')
            lcr.write('CORR:LENG 1')
            lcr.write('CORR:METH SING')
            lcr.write('CORR:LOAD CPG')
            lcr.write('CORR:USE 10') 
            lcr.write('CORR:SPOT1:STATE ON')    
            lcr.write('CORR:SPOT2:STATE OFF')    
            lcr.write('CORR:SPOT3:STATE OFF')
            lcr.write('CORR:SPOT1:FREQ '+frequency)
            #perform open correction -> unprobe device\   
            raw_input('Unprobe DUT and press ENTER to continue...')
            lcr.write('CORR:SPOT1:OPEN')
            lcr.write('CORR:OPEN:STATE ON')
            lcr.write('DISP:PAGE MEAS')
            #poll lcr to determine measurment state
            lcr.write('*OPC?')    
            done = lcr.read()    
            while done == 0:
                lcr.write('*OPC?')
                done = lcr.read()        
                time.sleep(0.5)
            #reprobe device                                
            raw_input('Probe DUT, then press ENTER')                
        lcr.write('FREQ '+frequency)

Подканите са двете raw_input().


person Bruce Wayne    schedule 12.08.2011    source източник


Отговори (1)


Причината, поради която получавате непрекъснати съобщения във вашата конзола, е, че системните регистрационни файлове използват същия изходен поток като вашето приложение.

Spyder е хубава програма, която просто вгражда IPython или Python(backup) конзола в QT прозорец, можете да използвате подобно решение - просто използвайте Qt4 за изчертаване на прозорец, който включва IPython конзола

Това, което трябва да направите, е следното (източник):

def embed_ipython(window):
    "wrapper funcs - works < IPython 0.11"
    from IPython.Shell import IPShellEmbed
    ipshell = IPShellEmbed(user_ns = dict(w = window))
    ipshell()

Тук „прозорец“ е централен обект от някакъв вид, който искате да изложите на IPython (за манипулиране, тестване на различни методи и т.н.).

Инициализацията на GUI приложението ще бъде така:

if __name__ == "__main__":
    import sys
    from PyQt4 import QtGui
    app = QtGui.QApplication(sys.argv)
    window = QtGui.QMainWindow()
    window.show()
    embed_ipython(window)
    sys.exit(app.exec_())

Някои допълнителни четения:

person timgluz    schedule 12.08.2011
comment
Опитах се да добавя това, което поставихте тук, в основния си код, но когато го стартирам, първо изскача GUI, който работи нормално, но за да стартирам обвивката на ipython, трябва да затворя GUI. Искам да работят едновременно, но мога да стартирам само едното или другото. Частта на ipython shell от моя код е заснет от екрана на тази връзка imgur.com/cy5Eu Благодаря за помощта между другото - person Bruce Wayne; 16.08.2011