为什么这个开放式软件代码两次运行相同的命令行参数?

2024-04-29 15:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个在线判断程序,该程序将获取用户的c++代码,并告诉他们该代码的输出是否正确。目前,我正在研究一个开源的python项目,看看如何做到这一点。在示例代码中,它们同时运行子流程检查输出()和子流程调用(),尽管他们几乎做同样的事情。由于我对子进程和命令行参数是一个初学者,我想知道这是否有原因。谢谢!你知道吗

    if language == "C++":
        filename = "submissions/" + str(runID) + ".cpp"
        try :
            subprocess.check_output('g++ ' + filename, stderr = subprocess.STDOUT , shell=True);
        except subprocess.CalledProcessError, e:
            return (-1 , e.output)
        retval = subprocess.call('g++ ' + filename , shell = True)
        subprocess.call('timeout 1s ./a.out < ' + inpfile + ' > ' + outfile , shell = True)

Tags: 项目代码用户程序true示例output开源
1条回答
网友
1楼 · 发布于 2024-04-29 15:30:40

在这种情况下,看起来这只是一个糟糕的代码。你知道吗

^{}将使用指定的参数运行g++,如果编译器出现错误退出,则收集输出并将其保存在e。然后返回元组(-1, output)。你知道吗

如果编译器第一次成功,代码将使用相同的命令行参数再次运行编译器,以获取返回值。但是,除非出现任何系统问题,例如磁盘空间几乎没有用完,否则如果编译器第一次成功,那么第二次就会成功(因为输出已经被写入,所以没有做任何有用的工作)。之后,输出运行。你知道吗

在另一个注释中:除了运行不可信C++代码通常不安全之外,如果文件名是用户提供的,并且没有得到适当的消毒,那么使用^ {CD5>}会创建its own security concerns。你知道吗

相关问题 更多 >