繁体   English   中英

从命令行设置 Python 递归限制

[英]setting the Python recursion limit from the command line

我想从 python 命令行设置递归限制(作为学生编写的脚本评分管道的一部分)。 让我们忽略学生不应该使用非常深的递归这一事实。

基本上,我想要类似的东西

python studentcode.py --firstrunmycode "sys.setrecursionlimit(5000)"

...因此在运行学生的 python 脚本之前,解释器的递归限制增加到 5000。

一种解决方案是首先在学生文件的开头添加代码以设置递归限制,但必须有一种更优雅的方式来继续。

我不知道如何从 cmd 做到这一点,但您可以在每个文件的开头添加 setrecursionlimit 代码。 如果要手动执行的文件太多,请尝试一些 python 代码。

import os
#Assuming all python files are in a directory called "files"
dirfiles = os.listdir("./files")

for item in dirfiles:
    if item.endswith(".txt"):
        with open("./files/" + item, "r") as f:
            code = f.read()
            
        with open("./files/" + item, "w") as f:
            f.write("""import sys
sys.setrecursionlimit(<some recursion limit>)

""" + code)

这将在目录files中的每个 python 文件上方添加一行设置递归限制。

编辑:或者您可以使用 exec() 并制作自己的解释器扩展。

import os
import sys
import argparse

pa = argparse.ArgumentParser()
pa.add_argument(
    "File",
    type=str
)
pa.add_argument(
    "recurse",
    type=int
)

args = pa.parse_args()

with open(args.File, "r") as f:
    os.chdir(os.path.dirname(args.File))
    exec(
        """import sys
sys.setrecursionlimit(""" + str(args.recurse) + """)

""" + f.read()
    )

This creates a python interpreter extension, so assuming the code above is in a file called run.py then you just use python run.py <path to python file to run> <recursionlimit> , so for example python run.py files/foo.py 2000

尝试这个:

python -c "import sys;sys.setrecursionlimit(5000);exec(open('studentcode.py.py').read())"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM