4

使用 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)

谢谢

4

1 回答 1

2

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

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

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

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

于 2013-01-10T04:29:14.230 回答