python子进程被while循环阻塞

时间:2015-01-30 21:08:22

标签: python while-loop subprocess

我想用Python脚本控制一个C程序。 C程序看起来像这样:

#include <stdio.h>
#include <stdlib.h>

void main(){
    int num;
    do{
        printf("insert a number: \ninsert 3 to exit\n");
        scanf("%d", &num);
        switch(num){
            case 1: {printf("you pressed 1\n");break;}
            case 2: {printf("you pressed 1\n");break;}
            default:{printf("you pressed another key\n");}
        }
    }while(num!=3);
}

我的python脚本正在使用子进程:

   import subprocess
   p=subprocess.Popen('./Cprogram', stdin=subprocess.PIPE, stdout=subprocess.PIPE)
   p.stdin.write('1')
   p.communicate()

结果是python shell被光线挡在空行上。

在c程序中没有while,脚本运行正常。我怎么能管理它?

谢谢

1 个答案:

答案 0 :(得分:-1)

p.communicate()将一直运行,直到C程序完成执行。由于你还没有传入3,你的程序还没有完成执行。也许你正在寻找类似的东西(按照塞巴斯蒂安的评论编辑):

import subprocess

p=subprocess.Popen('./Cprogram', stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write('1\n')
p.stdin.write('3\n')
out, err = p.communicate()
print(out)