用子进程写入stdin

时间:2017-01-18 18:29:58

标签: python linux

我有以下C程序

#include <stdio.h>


int main()
{

    char a[200];
    a[199] = 0;


    printf("Enter some input ->\n");
    scanf("%s"  ,a);

    printf ("\nInput was %s\n", a);

    return 0;
}   

我尝试以下列方式写入一些输入:

from subprocess import *
a = Popen(["my_prog.elf", stdin=PIPE) 
a.stdin.write("MyInput")

然而这似乎没有用......任何想法如何解决这个问题?

**编辑**

有没有人知道为什么a.stdin.flush()不会工作?

1 个答案:

答案 0 :(得分:2)

scanf读取整行,直到它读取新行字符\n,所以你也必须发送它:

from subprocess import Popen, PIPE
a = Popen(["my_prog.elf"], stdin=PIPE) 
a.stdin.write("MyInput\n")
如果您的输出流(flush)被缓冲(默认情况下哪些管道不是),则仅需要

stdin。即使这样,您也需要\n来终止该行。