首页 > 解决方案 > 我想开发一个使用 gcc 编译和运行 c 程序的 python 脚本

问题描述

我想用 Python 编写一个程序,它以 C 程序作为输入,针对同样作为输入的测试用例执行它,并打印每个测试用例的输出。我正在使用 Windows

我尝试使用 subprocess.run 但它在运行时不接受输入(即动态)

from subprocess import *
p1=run("rah.exe",input=input(),stdout=PIPE,stderr=STDOUT,universal_newlines=True)
print(p1.stdout)

C代码:

#include<stdio.h>
void main()
{
    printf("Enter a number");
    int a;
    scanf("%d",&a);
    for(int i=0;i<a;i++)
    {
        printf("%d",i);
    }
}

python空闲时的预期输出:

Enter a number
5
01234  

实际输出:

5
Enter a number 01234

标签: pythonc

解决方案


我同意@juanpa.arrivillaga 的建议。您可以为此使用subprocess.Popencommunicate()

import subprocess
import sys
p = subprocess.Popen('rah.exe', stdout=sys.stdout, stderr=sys.stderr)
p.communicate()

更新:上面的脚本在 IDLE 上不起作用,因为 IDLE 更改了sys.stdout, sys.stderr破坏fileno()函数的 IO 对象。如果可能,您应该将代码放入 python 文件(例如script.py),然后使用以下命令从 Windows 命令行运行它:

python script.py

或者,如果没有,您可以在 Windows 的命令行上执行类似于 IDLE 的操作,方法是输入以下命令:

python

这将启动一个类似于 IDLE 但没有更改的 IO 对象的控制台。您应该在此处输入以下行以获得类似的结果:

import subprocess
import sys
_ = subprocess.Popen('rah.exe', stdout=sys.stdout,stderr=sys.stderr).communicate()

推荐阅读