pexpect没有传递整个字节串

时间:2015-07-05 01:06:54

标签: python-2.7 pexpect

我在C中编写了一个简单的程序,它接收缓冲区中的字符串,然后以十六进制打印出缓冲区,如果找到" \ x04"则中止()在字符串中:

#include <stdio.h>
#include <signal.h>

int main(void) {
    unsigned char buf[16] = {0};
    int i;

    printf("Name: ");
    fgets(buf, sizeof(buf), stdin);

    for(i = 0; i < sizeof(buf); i++)
    {
        printf("0x%02x ", buf[i]);
        if(buf[i] == 0x04)
            kill(getpid(), SIGABRT);
    }
    printf("\n");
}

如果我通过管道传递程序的输出,例如,     perl -e&#39; print&#34; \ x08 \ x08 \ x04 \ x08&#34;&#39; | ./fget-test

但是我使用pexpect得到了错误的输出:     0x54 0xd0 0x08 0x0a 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

好像0x04永远不会通过?

这是我用于pexpect的python代码:

#!/usr/bin/python2.7
import pexpect
import sys
import os
import io

print "\x54\xd0\x04\x08\x0a\x0a"

c = pexpect.spawn('./fget-test')
c.setecho(False)
c.maxsize = 1

c.expect('Name:')
os.write(1, (b"\x54\xd0\x04\x08\x0a"))
os.write(c.fileno(), (b"\x54\xd0\x04\x08\x0a"))

print c.readline()

为什么在使用pexpect时\ 0x04永远不会出现?我意识到我可以使用subprocess.Popen,但在这种情况下,我不能因为它是一个较小的测试用例来帮助诊断实际发生的事情。将pexpect python程序传递给xxd时,我可以清楚地看到&#34; 0x04&#34;通过。

1 个答案:

答案 0 :(得分:0)

似乎已经解决了这个问题。解决方案是导入tty,然后在文件描述符上调用tty.setraw。