【问题标题】:Send command and exit using python pty pseudo terminal process使用python pty伪终端进程发送命令并退出
【发布时间】:2012-01-03 10:27:09
【问题描述】:

使用 python pty 模块,我想向终端仿真器发送一些命令,使用一个函数作为标准输入(如 pty 模块想要的那样),然后强制退出。我想到了类似的东西

import pty
cmnds = ['exit\n', 'ls -al\n']
# Command to send. I try exiting as last command, but it doesn't works.

def r(fd):
    if cmnds:
        cmnds.pop()
        # It seems is not executing sent commands ('ls -al\n')
    else:
        # Can i quit here? Can i return EOF?
        pass

pty.spawn('/bin/sh', r)

谢谢

【问题讨论】:

  • 您可能想要调查 pexpect,它是为这类事情设计的:noah.org/wiki/pexpect
  • 我刚刚尝试过但无法使其工作,但从文档中我得到的功能是与输出交互而不是接收参数列表
  • 那么没有办法将字符串作为标准输入发送?

标签: python shell eof pty


【解决方案1】:

首先,pty 模块不允许您与运行 Python 的终端仿真器进行通信。相反,它允许 Python 假装 是一个终端仿真器。

查看pty.spawn() 的源代码,它似乎旨在让衍生进程在运行时接管 Python 的标准输入和标准输出,这不是您想要的。

如果你只想生成一个 shell,向它发送命令并读取输出,你可能需要 Python 的 subprocess 模块(特别是,如果你只想运行一个命令,subprocess.Popen 类' .communicate() 方法会有所帮助)。

如果你真的非常需要子进程在 pty 而不是管道中运行,你可以使用os.openpty() 来分配一个主文件描述符和一个从属文件描述符。使用从文件描述符作为子进程的标准输入和标准输出,然后将您的命令写入主文件描述符并从中读取响应。

【讨论】:

  • 能否在使用os.openpty()的时候加一段代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
相关资源
最近更新 更多