【问题标题】:Python: Redirect output to several consoles?Python:将输出重定向到多个控制台?
【发布时间】:2012-12-24 15:17:36
【问题描述】:

我有一个主程序,用户可以在其中多次调用子进程(下载文件)。每次,我使用子进程调用 aria2c,它会将进度打印到标准输入。当然,希望用户可以分别看到每次下载的进度。

那么问题是如何将每个进程的输出重定向到单独的控制台窗口?

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    我有点困惑。使用 subprocess.Popen(...) 应该为每次调用自动生成一个新的命令提示符。什么是aria2c?它也是你用python编写的程序吗?它是写入命令提示符窗口的第 3 方 exe 吗?

    我可以帮你把所有子进程的输出重定向到主命令提示符,这样就可以内联显示了。

    另外,也许您可​​以先详细说明发生了什么,这样我才能更好地理解您的麻烦。

    【讨论】:

    • Aria2c 是第三方程序。奇怪的是,即使 subprocess.Popen 被多次调用,只有一个命令提示符是打开的。我使用的确切命令是“Popen(command, shell=True)”。而且,这是否允许多个进程同时运行(无需等待上一个命令完成)?
    • 当您使用 subprocess.Popen 时,您可以同时运行多个进程。我使用的是马尔可夫链模拟,我同时运行多个链(以节省时间)。最初我的脚本会打开 5 个不同的命令提示符窗口,并显示输出,但我认为最好将输出重定向到主窗口,在那里我可以内联显示每个人的进度。当该过程完成并退出时,我会将其处理为默认输出为“完成”。另外,你运行的是linux还是windows?
    • 还有一点,子进程库可能有一点问题,所以您可能必须创建线程类,并产生新线程来运行 Aria2c。这可能会慢很多(取决于 aria2c 的处理方式。我可能建议在 python 中创建一个子模块,它只通过 os.system(...) 调用程序,并且您的主脚本可以调用 subprocess.Popen()这个带有给定 sys.argv 的子模块在系统调用中使用。但是如果你通过 python 运行这个程序,只使用 os.system(...) 会弹出一个窗口并显示输出吗?
    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多