使用Python pty伪终端发送命令并退出
我想用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)
谢谢
1 个回答
2
首先,pty
模块并不能让你和Python运行的终端模拟器直接交流。相反,它的作用是让Python假装成一个终端模拟器。
从pty.spawn()
的源代码来看,它的设计目的是让一个新启动的进程接管Python的输入和输出,这并不是你想要的效果。
如果你只是想启动一个命令行,发送命令给它,并读取输出,那么你可能需要使用Python的subprocess
模块。特别是如果你只想运行一个命令,subprocess.Popen
类的.communicate()
方法会很有帮助。
如果你确实需要子进程在一个伪终端(pty)中运行,而不是通过管道,你可以使用os.openpty()
来分配一个主文件描述符和一个从文件描述符。然后把从文件描述符当作子进程的输入和输出,接着把命令写入主文件描述符,并从中读取响应。