无法运行包含无限 while 循环的 exe,因为即使在使用 pyinstaller 转换和隐藏控制台后它仍然打开控制台窗口[重复]

问题描述 投票:0回答:1

我制作了一个 python 脚本,它基本上有一个 while 循环,等待特定的 exe 启动,一旦打开它就会关闭系统。 但问题是,exe 文件运行时会不断打开和关闭控制台窗口。

我也尝试使用 --noconsole 和 --windowed ,但仍然有一小会儿控制台窗口弹出并消失,这种情况不断重复,所以很明显有一个后台文件正在运行。

替代方案可能是不使用无限循环,但我无法弄清楚。

这是代码:


def process_exists(process_name):
    call = 'TASKLIST', '/FI', f'imagename eq {process_name}'
    output = subprocess.check_output(call).decode()
    last_line = output.strip().split('\r\n')[-1]
    return last_line.lower().startswith(process_name.lower())

def time ():
    while True:
        if process_exists("RobloxPlayerBeta.exe") or process_exists("RobloxPlayerLauncher.exe"):
            os.system("shutdown /s")
        if process_exists("Windows10Universal.exe"):
            # os.system("shutdown /s") 
            print("Okay")  
        
  
time()
python while-loop cmd console exe
1个回答
1
投票

帕纳夫。

不清楚如何执行脚本,我可能猜想您只需使用

python.exe
运行它即可。尝试使用
pythonw.exe
,它不会打开控制台窗口。

另一件事是在一个 .exe 文件中构建脚本并在启动时将其作为隐藏进程启动,您可以像这样实现:

  1. 安装PyInstaller并将脚本转换为.exe:
pip install pyinstaller
pyinstaller --noconsole --onefile YOUR_SCRIPT.py

转换后的 .exe 文件将位于名为

.\dist
YOUR_SCRIPT.exe
文件夹中。

现在您可以重命名二进制文件,但您希望它在进程中显示。

最后,您必须将 .exe 文件添加到启动文件夹 (

%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
) 以确保您的脚本始终处于活动状态。

如果您想停止该进程,请打开任务管理器中的“进程”选项卡并按名称终止该进程(

YOUR_SCRIPT.exe
)。

P.S.:这里有一个更清晰的脚本做同样的事情:

import os
import time
import subprocess

# List of processes to monitor
TARGET_PROCESSES = ["RobloxPlayerBeta.exe", "RobloxPlayerLauncher.exe"]

# Function to shut down the computer
def force_shutdown():
    os.system("shutdown /s /f")

# Function to check if a process is running
def is_target_process_running():
    try:
        # Get the list of running processes
        output = subprocess.check_output("tasklist", shell=True).decode()
        for process in TARGET_PROCESSES:
            if process in output:
                return True
    except Exception as e:
        # Ignore errors, e.g., if "tasklist" fails
        print(f"Error: {e}")
    return False

# Main loop to monitor processes
def monitor_processes():
    while True:
        if is_target_process_running():
            force_shutdown()
            break  # Stop monitoring after shutdown command
        time.sleep(5)  # Check every 5 seconds


if __name__ == "__main__":
    monitor_processes()
© www.soinside.com 2019 - 2024. All rights reserved.