发送命令并使用python pty伪终端进程退出

时间:2012-01-03 10:27:10

标签: python shell eof pty

使用python pty模块,我想使用函数作为stdin(如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)

谢谢

1 个答案:

答案 0 :(得分:2)

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

查看pty.spawn()的源代码,看起来它的目的是让生成的进程在运行时接管Python的stdin和stdout,这不是你想要的。

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

如果您确实需要在pty而不是管道中运行子进程,则可以使用.communicate()来分配主文件描述符和从属文件描述符。使用从属文件描述符作为子进程'stdin和stdout,然后将命令写入主文件描述符并从中读取响应。