【问题标题】:Multiple terminal handling in pythonpython中的多终端处理
【发布时间】:2015-09-10 09:59:43
【问题描述】:

我有一个 python 应用程序,我想将它用作一个多终端处理程序,我希望每个对象都有自己的终端与其他终端分开,每个终端都运行它自己的实例,就像我运行两个或多个单独的实例时一样Linux 中的终端(/bin/sh 或 /bin/bash)

示例:(只是逻辑而不是代码)

first_terminal = terminalInstance()
second_terminal = terminalInstance()
first_result = first_terminal.doSomething("command")
second_result = second_terminal.doSomething("command")

我实际上需要让每个终端在虚拟环境中获取标准输入和标准输出并控制它们,这就是为什么它们必须分开,这在 python 范围内可能吗?我见过很多处理单个终端的代码,但是你如何处理多个终端。 PS我不想包括while循环(如果可能的话),因为我想增加处理2个或更多终端的可伸缩性到我的系统可以处理的程度?是否可以通过引用来控制它们,给每个终端一个引用,然后调用该对象并发出命令?

【问题讨论】:

    标签: python linux process terminal


    【解决方案1】:

    pexpect 模块 (https://pypi.python.org/pypi/pexpect/) 等允许您通过伪 tty 启动程序,“允许您的脚本生成子应用程序并像人类键入命令一样控制它”。

    您可以轻松生成多个命令,每个命令在单独的伪 tty 中运行并由单独的对象表示,并且您可以单独与每个对象交互。关于何时/如何交互有很大的灵活性。您可以向它们发送输入,并读取它们的输出(阻塞或非阻塞),并结合超时和替代输出。

    这是一个简单的会话示例(运行 bash,让它执行“ls”命令,收集第一行输出)。

    import pexpect
    x = pexpect.spawn("/bin/bash")
    x.sendline("ls")
    x.expect("\n")  # End of echoed command
    x.expect("\n")  # End of first line of output
    print x.before  # Print first line of output
    

    请注意,您将收到来自终端的所有输出,通常包括您发送给它的每个字符的回显副本。如果运行类似于 shell 的东西,您可能还需要设置 shell 提示符(或确定正在使用的 shell 提示符)并使用它来解析输出(即查找每个命令输出的结尾)。

    【讨论】:

    • 这对随机输入的命令有效吗?通过 input() 读取?
    • 我想是的。但目前尚不清楚您的担忧是什么。命令的来源有什么不同?
    • expect 到底是什么意思?这不是说我期待系统有一定的输出吗?
    • 是的。但这可以像下一个 shell 提示符或什至只是一个换行符一样简单。此外,您可以使用超时并获取直到该时刻为止生成的输出。
    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多