繁体   English   中英

Pexpect回车问题

[英]Pexpect carriage return issue


我创建了一个使用pexpect检索某些命令输出的应用程序
我执行的命令示例之一如下:

ps aux

这是pexpect直接输出的一部分

root 28039 0.0 0.1 57780 3056 ? Ss Sep26 0:04 /opt/services/s^M
root 28093 0.5 0.4 131688 6492 ? Ss Sep26 93:25 /opt/services/s^M
root 28125 0.2 0.8 222680 13012 ? Ssl Sep26 36:21 /opt/services/s^M

这里的问题是输出被截断,而不仅在输出中间添加了'\\ r'。
这可以在命令中使用“ | cat”来解决,但是我需要一个不涉及将输出重定向到cat的解决方案。

我已经看到这种情况,当我发送一个大命令但输出始终是中间带有^ M的命令时。

为了解决此问题,我可以在终端机上还是在预想中进行任何更改吗?

采用

ps axuww

ww表示

   w               Wide output. Use this option twice for unlimited width.

import pexpect
child = pexpect.spawn('ps auxww')
while True:
    try:
        child.expect('\r\n')
        print(child.before)
    except pexpect.EOF:
        break

如注释中所述,由于隐式端子宽度设置, ps aux命令正在截断其输出。 您可以通过告诉ps使用宽输出( ps auxwwww )或增加终端宽度(pexpect setwinsize() )来防止这种情况,如注释中所述。

输出中的^M是类UNIX操作系统,显示DOS样式的CR / LF行尾。 这是因为pexpect实际上操作了psuedo-TTY设备。 pexect 文档中解释的内容

匹配行尾的最佳方法是查找换行符: "\\r\\n" (CR / LF)。 是的,这确实是DOS风格的。 一些UNIX人士可能会惊讶地发现,终端TTY设备驱动程序(哑,vt100,ANSI,xterm等)都使用CR / LF组合来表示行尾。 Pexpect使用Pseudo-TTY设备与子应用程序对话,因此,当子应用程序打印"\\n"您实际上会看到"\\r\\n"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM