我想從 python 命令列設定遞回限制(作為對學生撰寫的腳本進行評分的管道的一部分)。讓我們忽略學生不應該使用非常深的遞回的事實。
基本上,我想要類似的東西
python studentcode.py --firstrunmycode "sys.setrecursionlimit(5000)"
...以便解釋器的遞回限制在運行學生的 python 腳本之前增加到 5000。
一種解決方案是首先在學生檔案的開頭添加設定遞回限制的代碼,但必須有一種更優雅的方式來進行。
uj5u.com熱心網友回復:
試試這個:
python -c "import sys;sys.setrecursionlimit(5000);exec(open('studentcode.py.py').read())"
uj5u.com熱心網友回復:
我不知道如何從 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)
這將在目錄中的每個 python 檔案上方添加一行設定遞回限制files。
編輯:或者你可以使用 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()
)
這將創建一個 python 解釋器擴展,因此假設上面的代碼在一個名為的檔案中,run.py那么您只需使用python run.py <path to python file to run> <recursionlimit>,例如python run.py files/foo.py 2000
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383331.html
