我正在研究MOOC的数据集.我有很多python3代码片段,我需要运行并从中获取结果.为此,我编写了一个循环遍历每个片段的python脚本.对于每个片段我:
sys.stdout和sys.stderr我的stringIO缓冲区threading.thread对象中执行代码段这适用于"正确"的代码,但在其他情况下这有问题:
print(),当我将其设置回默认值(远离StringIO缓冲区)时,线程开始覆盖我的实际标准输出.这会污染我的报告.这是我目前的代码:
def execCode(code, testScript=None):
    # create file-like string to capture output
    codeOut = io.StringIO()
    codeErr = io.StringIO()
    # capture output and errors
    sys.stdout = codeOut
    sys.stderr = codeErr
    def worker():
        exec(code, globals())
        if testScript:
            # flush stdout/stderror
            sys.stdout.truncate(0)
            sys.stdout.seek(0)
            # sys.stderr.truncate(0)
            # sys.stderr.seek(0)
            exec(testScript)
    thread = threading.Thread(target=worker, daemon=True)
    # thread = Process(target=worker) #, stdout=codeOut, stderr=codeErr)
    thread.start()
    thread.join(0.5)  # 500ms
    execError = codeErr.getvalue().strip() …我已经定义了一个具有初始值的变量.
单步执行代码时:
怎么了?
注意:这是针对常见问题的参考问题.如果此处的通用答案对您没有帮助,请发布包含完整实际代码的问题.