如何防止以编程方式启动的 python 脚本在出错后退出命令提示符?

How to prevent programmatically started python script from exiting command prompt after error?

我必须经常启动几个不同的 python 程序,所以我正在尝试创建一个 "master" 脚本,我可以 运行 自动启动所有的其他人使用 subprocess.Popen

我遇到的问题 运行 是当其中一个程序出现错误时,命令提示符没有保持打开状态以便我可以阅读和更正错误,而是自动关闭。

这是我的代码。

import subprocess
print "Starting programs"

args = "python C:\Users\Admin\Desktop\Program1.py"
subprocess.Popen(args)

args = "python C:\Users\Admin\Desktop\Program2.py"
subprocess.Popen(args)

args = "python C:\Users\Admin\Desktop\Program3.py"
subprocess.Popen(args)

我也调查了 os.system,但我找不到任何允许这样做的东西。

您的代码不打印子进程的输出,这就是您看不到异常的原因。 要解决这个问题,只需为每个要 运行 查看所有异常并打印每个程序的输出以查看是否失败的程序添加一个 try-except 块,就像这样:

import subprocess


def run_programs():
    try:
        args = "python C:\Users\Admin\Desktop\Program1.py"
        out = subprocess.Popen(args)
        print out
    except Exception as e:
        print 'Error in Program1.py: {}'.format(e)

    try:
        args = "python C:\Users\Admin\Desktop\Program2.py"
        out = subprocess.Popen(args)
        print out
    except Exception as e:
        print 'Error in Program2.py: {}'.format(e)


if __name__ == '__main__':
    print "Starting programs"
    run_programs()

如果您想 运行 很多程序,正如 Padraic 指出的那样,for 循环会更实用。

import subprocess


def run_programs():
    cmds = [
        "python C:\Users\Admin\Desktop\Program1.py",
        "python C:\Users\Admin\Desktop\Program2.py"
        "python C:\Users\Admin\Desktop\Program3.py"
    ]
    for cmd in cmds:
        try:
            out = subprocess.Popen(cmd)
            print out
        except Exception as e:
            print 'Error in {}: {}'.format(cmd, e)

if __name__ == '__main__':
    print "Starting programs"
    run_programs()