Вывести вывод из Python в приложение C # - PullRequest
0 голосов
/ 10 октября 2018

Я создал приложение на C #, которое вызывает скрипт на Python.Приложение C # использует объект Process для вызова скрипта Python.Я также перенаправил стандартный вывод подпроцесса, чтобы я мог обработать вывод из скрипта python.

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

Могу сказать, что я пробовал почти все методы, которые можно получить из Google, например, добавить flush из sys.out, перенаправить sysout в Python, управляемый событиями C #получение сообщения или просто использование времени ожидания сообщения и т. д.,

Как очистить вывод функции печати?

Приложение, упакованное в PyInstaller, прекрасно работает в консольном режиме,вылетает в оконном режиме

Мне очень интересно, что, как PyCharm или другая Python IDE, они запускают скрипт Python внутри, но они могут печатать вывод один за другим без взлома оригинального скрипта Python как они это делают?

Версия Python 2.7.Надеюсь получить совет.

Спасибо!

1 Ответ

0 голосов
/ 11 октября 2018

Я просто использую очень глупый, но работающий метод для его решения:

с использованием потока для периодической очистки sys.out, фрагмент кода выглядит так:

import sys
import os
import threading
import time


run_thread = False


def flush_print():
    while run_thread:
       # print 'something'
        sys.stdout.flush()
        time.sleep(1)

in main function:

if __name__ == '__main__':
    thread = threading.Thread(target=flush_print)
    run_thread = True
    thread.start()

    # my big functions with some prints, the function will block until completed

    run_thread = False
    thread.join()

Очевидно, это уродливо, но у меня нет лучшего способа сделать работу.

...