gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:48 25 4
gpt4 key购买 nike

我正在构建一个在线判断器,它获取用户的 C++ 代码,并告诉他们它的输出是否正确。目前,我正在查看一个开源 python 项目,看看如何去做。在示例代码中,它们同时运行 subprocess.check_output() 和 subprocess.call(),尽管它们几乎做同样的事情。由于我一般是子进程和命令行参数的初学者,所以我想知道是否有这样的原因。谢谢!

    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)

最佳答案

在这种情况下,看起来这只是错误的代码。

subprocess.check_output将使用指定的参数运行 g++,如果编译器因错误退出,则收集输出并将其保存在 e 中。然后返回元组 (-1, output)

如果编译器第一次成功,代码将使用相同的命令行参数再次运行编译器,只是为了获取返回值。但是,除非出现任何系统问题,例如刚好用完磁盘空间,否则如果编译器第一次成功,第二次也会成功(因为输出已经写入,所以没有做任何有用的工作)。在此之后,输出得到运行。

另一个注意事项:除了运行不受信任的 C++ 代码通常不安全这一事实外,使用 shell=True 会创建 its own security concerns如果文件名是用户提供的并且没有得到正确的清理。

关于python - 为什么这个开放的软件代码两次运行相同的命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57600634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com