Как я могу открывать окно cmd каждый раз, когда я запускаю скрипт на python? - PullRequest
0 голосов
/ 20 октября 2019

Теперь у меня есть два скрипта Python "GUI.py" и "main.py". «GUI.py» написан с использованием pyQt5. Сначала я открываю окно cmd и запускаю «python GUI.py». Он открывает окно, которое содержит кнопку «connect». Каждый раз, когда я нажимаю кнопку, будет выполняться функция обратного вызова onclick (), например, следующие коды:

def onclick():
    subprocess.Popen("python main.py")

Однако журнал все еще печатается в окне cmd, которое я первоначально открыл. Это не то, что я хочу, потому чтотрудно сказать, какой журнал принадлежит какому "main.py". Есть ли решение?

1 Ответ

1 голос
/ 20 октября 2019

У вас есть два варианта, чтобы предотвратить вывод дочернего процесса в консоль. Первый - использовать подпроцесс. PIPE для отправки данных из дочернего процесса в буфер и чтения ut только когда дочерний процесс завершен с использованием метода связи подпроцесса:

def onclick():
    subprocess.Popen("python main.py", stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Если вам вообще не нужен вывод дочернего процесса в материнском процессе, перейдите с подпроцессом. DEVNULL:

def onclick():
    subprocess.Popen("python main.py", stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)

Редактировать:

Если вы не хотитеиметь выход дочернего процесса в главном процессе вообще или если выход слишком велик, и PIPE может фактически сломаться. Вам лучше пойти с DEVNULL и модулем регистрации:

#In child process setup logging
        logging.basicConfig(
            filename="logfile", format='%(asctime)s - %(levelname)s - %(message)s', level=logging.INFO)

#then in child process substitute all print to logging.info, logging.warning, #logging.error and whatewer you want.

# Then start child process the following way from master process:

def onclick():
    subprocess.Popen("python main.py", stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)

Надеюсь, ответ был полезен для вас, не стесняйтесь задавать вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...