使用 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)
谢谢
首先,pty
模块不允许您与运行 Python 的终端仿真器进行通信。相反,它允许 Python 假装be终端模拟器。
查看源代码pty.spawn()
,看起来它的设计目的是让派生进程在运行时接管 Python 的 stdin 和 stdout,这不是你想要的。
如果您只想生成一个 shell,向其发送命令并读取输出,您可能需要 Pythonsubprocess
模块(特别是,如果您只想运行一个命令,则subprocess.Popen
class' .communicate()
方法会有帮助)。
如果您确实需要子进程在 pty 而不是管道中运行,您可以使用os.openpty()
分配主文件描述符和从文件描述符。使用从属文件描述符作为子进程的标准输入和标准输出,然后将命令写入主文件描述符并从中读回响应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)