簡體   English   中英

每次運行 python 腳本時,如何打開 cmd window ?

[英]How can I open a cmd window everytime I run a python script?

現在我有兩個 python 腳本“GUI.py”和“main.py”。 “GUI.py”是使用 pyQt5 編寫的。 首先,我打開一個 cmd window 並運行“python GUI.py”。它會打開一個 window,其中包含一個名為“connect”的按鈕。 每次單擊按鈕時,都會執行如下代碼的 onclick() 回調 function:

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

但是,日志仍然打印在我最初打開的 cmd window 中。這不是我想要的,因為很難分辨哪個日志屬於哪個“main.py”。 有什么解決辦法嗎?

您有兩種選擇來阻止控制台中子進程的 output 第一個是使用 subprocess.PIPE 將數據從子進程發送到緩沖區並僅在子進程使用子進程的通信方法完成時讀取 ut:

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

如果您根本不需要母進程中子進程的 output,則 go 與 subprocess.DEVNULL:

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

編輯:

如果您根本不想在主進程中擁有子進程的 output,或者 output 太大而 PIPE 實際上可能會崩潰。 您最好使用帶有 DEVNULL 和日志記錄模塊的 go:

#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)

希望回答對你有用,歡迎提問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM