为什么我的scanf抓住了我从Popen那里得到的顺序

时间:2014-08-14 11:25:43

标签: python c scanf

TL; DR:如何让我的scanf(必须是scanf)从python中读取输入?

所以我在python中有这个文件

import subprocess
import sys

process=subprocess.Popen(["canCHandleIt.exe"],stdout=subprocess.PIPE)
res=process.communicate(2)
print res[0]

重点很简单。我希望我的C能够捕获数字“2”并打印成功两次,正如我的c代码建议的那样。

#include <stdio.h>
int main(){
    int x;int o;
    scanf("%d",&x);
    for (o=0;o<x;o++){
    printf("Sucsess!");
    }
}

但它停止了。当然如果键入数字2,那么它将起作用,但我希望我的scanf单独工作。

有些人可能会建议我只使用C等效于Python的sys.stdin.readline(),但我真的希望我的scanf能够在没有人为干扰的情况下工作。 (之所以我问这个,是因为我经常人们在比赛中使用scanf,我想在python中复制比赛机器人,显然。)

你可以假设我已经使用了我的c文件。

1 个答案:

答案 0 :(得分:4)

试试这个:

import subprocess
import sys

process=subprocess.Popen(["canCHandleIt.exe"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
res=process.communicate('2')
print res[0]

... stdin=subprocess.PIPE传递给Popen(),传递&#34; 2&#34;作为字符串而不是int加入communicate()

communicate()记录了:

  

可选的输入参数应该是要发送给子级的字符串   过程.....

  

请注意,如果要将数据发送到进程的stdin,则需要   使用stdin = PIPE创建Popen对象。