[英]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.