首页 > 解决方案 > 如何打开终端,在其上执行 python 脚本,然后等待脚本结束?

问题描述

本质上,我需要做的是创建一个打开新终端的函数,在其上执行 python 脚本,然后等待脚本结束。根据我在网上阅读的内容,最好的方法是使用 Python 库子进程。但是,我发现它很难使用。当我运行以下代码时:

def function():
    cmd = "gnome-terminal; python3 simple_action_client.py"
    subprocess.check_output(cmd, shell=True)
    print("I'm done!")

打印在终端打开后执行,这意味着“check_output”函数只等待 cmd 的第一部分被执行。

本质上,我想做的是以下几点:

def function():
    terminal_command = "gnome-terminal"  
    script_command = "python3 script.py"
    subprocess.run(terminal_command, shell = True)
    subprocess.check_output(script_command, shell = True)
    print("I'm done!")

但是当我做这样的事情时,脚本不会在新终端上运行,我希望它在那里运行。

这可能吗?感谢您的帮助!

标签: pythonpython-3.xterminalsubprocessgnome-terminal

解决方案


您正在使用链接命令在本地 shell 中运行

def function():
    cmd = "gnome-terminal; python3 simple_action_client.py"
    subprocess.check_output(cmd, shell=True)
    print("I'm done!")

您需要调整 cmd 行以告诉 gnome-terminal 执行命令

def function():
    cmd = "gnome-terminal --wait -- python3 simple_action_client.py"
    subprocess.check_output(cmd, shell=True)
    print("I'm done!")

注意“--”而不是“;” 和“--wait”等待shell内的命令退出


推荐阅读