在PYTHON中通过subprocess.Popen测试C程序会引发cygwin错误

在PYTHON中通过subprocess.Popen测试C程序会引发cygwin错误,python,c,testing,cygwin,popen,Python,C,Testing,Cygwin,Popen,我现在是一名学习C语言的学生,我一直在努力为我的同龄人编写测试程序。 我决定用python编写测试程序,因为我知道所有学生都有相同的IDE和解释器版本 我决定使用subprocess.Popen。 我使用tar命令解包了一个tar文件,因为我的C程序存储在其中,然后使用gcc命令编译所需的文件。然后我使用存储在文本文件中的输入运行测试,将用户输出与相应文本文件中的预期输出进行比较 当我通过cmd运行我的C可执行文件时,它可以完美地工作,并且不会出现错误。 但是,当我试图通过subprocess.

我现在是一名学习C语言的学生,我一直在努力为我的同龄人编写测试程序。 我决定用python编写测试程序,因为我知道所有学生都有相同的IDE和解释器版本

我决定使用subprocess.Popen。 我使用tar命令解包了一个tar文件,因为我的C程序存储在其中,然后使用gcc命令编译所需的文件。然后我使用存储在文本文件中的输入运行测试,将用户输出与相应文本文件中的预期输出进行比较

当我通过cmd运行我的C可执行文件时,它可以完美地工作,并且不会出现错误。 但是,当我试图通过subprocess.Popen运行它们时,除了预期的输出之外,我还得到了一个cygwin错误,导致我的测试程序报告测试失败

我使用这个函数,为它提供一个字符串数组作为命令的参数

def run_cmd_command(arguments_list):
        """
        runs the given command through the command line and returns information
        about the command.
        :param arguments_list: a list representing the command to run
        :return: A tuple containing the returncode, the output of the command and
        all the errors.
        """
        process = subprocess.Popen(arguments_list, stdin=subprocess.PIPE,
                           stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                           universal_newlines=True)
        output, errors = process.communicate()
        return process.returncode, output, errors
当提供了正确的输入时,测试python程序可以正常工作

另一方面,当输入不正确时,C程序应该将字符串打印到stderr中:
“Invalid Input\n”
,但打印
Invalid Input
0[main]TreeAnalyzer 1780 cygwin_异常::打开_stackdumpfile:将堆栈跟踪转储到TreeAnalyzer.exe.stackdump


我想向您提供更多信息,但我不确定提供哪些信息,因为我不了解问题的根源。

您的C程序很可能存在问题。我建议尝试一个非常简单的C程序,比如Hello World,首先测试你的工作流。这是一个好主意,我会尝试一下,然后发布一个更新。你使用cygwin的python3吗?从
python-V
python3-V
提供版本,从
uname-a
提供cygwin版本信息。另外,我建议您使用Cygwin mintty控制台而不是windows cmd,还强烈建议您使用python3(版本3),因为python(版本2)在12月31日是EOL。如果您使用的是python3,您可以使用与此有效相同的。我同意其他人的观点,这可能与Python没有什么关系;更确切地说,您的C程序由于某种原因正在崩溃。请尽量提供a,否则很难说太多。谢谢你给我的提示,伙计们,这是一个C问题。当我用valgrind和所有可能的标志测试它时,它发现了一些错误,而Clion和命令行似乎没有。所以我可以做得更好,知道为什么Clion或命令文件不告诉我代码中的错误导致它卡住了吗?我试图释放一个不存在的项目,但没有正确关闭文件。还有,因为我是新来的,我怎样才能相信你帮助了我?提前谢谢!