使用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)
谢谢
答案 0 :(得分:2)
首先,pty
模块不允许您与Python运行的终端仿真器进行通信。相反,它允许Python假装是终端仿真器。
查看pty.spawn()
的源代码,看起来它的目的是让生成的进程在运行时接管Python的stdin和stdout,这不是你想要的。
如果你只想生成一个shell,向它发送命令,并读取输出,你可能需要Python的subprocess
模块(特别是,如果你只想运行一个命令,{{1 }'class subprocess.Popen
方法会有所帮助。)
如果您确实需要在pty而不是管道中运行子进程,则可以使用.communicate()
来分配主文件描述符和从属文件描述符。使用从属文件描述符作为子进程'stdin和stdout,然后将命令写入主文件描述符并从中读取响应。