Консоль Python выводит вывод иначе, чем консоль sypder

У меня есть код Python, который измеряет HP LCR Meter и собирает данные для нас различными способами. Недавно я создал графический интерфейс для задания начальных условий для сотрудников, которым неудобно изменять переменные в коде. Все работает, кроме 1 вещи. МЫ используем последнюю версию python xy, поэтому версию python 2.6.6 с pyqt и spyder на ПК с Windows 7.

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

Как видно на предоставленных снимках экрана, существует режим начальной настройки машины для настройки устройства, которое будет сканироваться измерителем LCR, и есть два пользовательских ввода, которые запрашивает код. В 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 (резервную копию) в окно 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 (для манипулирования, тестирования различных методов и т. д.).

Инициализация приложения с графическим интерфейсом будет выглядеть так:

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
Я попытался добавить то, что вы поместили здесь, в свой основной код, однако, когда я его запускаю, сначала появляется мой графический интерфейс, который работает как обычно, но для запуска оболочки ipython мне нужно закрыть свой графический интерфейс. Я хочу, чтобы они работали одновременно, но могут запускать только одно или другое. Часть моего кода оболочки ipython показана на экране по этой ссылке imgur.com/cy5Eu Спасибо за вашу помощь, кстати - person Bruce Wayne; 16.08.2011