截断字符串.IO()不会

2024-09-29 19:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在制作一个flask应用程序,使用backtracker构建团队配置。在后端的一切都很好,但我有麻烦服务的内容。这不是制作的东西,只是我和我朋友的剧本。我将stdOut捕获到StringIO()对象中。然后我将其写入一个文件并将该文件提供给浏览器。问题是,在某个地方,缓冲区没有被清除,我在每个请求上都会得到重复的数据。你知道吗

编辑:我捕获STDOUT以便保留backtracker的原始实现。即:运行回溯输出到终端,运行应用程序将运行以下行为。这是好的设计原则吗?你知道吗

@app.route('/<solutions>', methods=['GET'])
def getTeams(solutions=1):
    f = open("tmp.txt", "w")


    solutions = int(solutions)

    old_stdout = sys.stdout
    old_stdout.flush()
    sys.stdout = mystdout = StringIO()

    teams.main(solutions)

    sys.stdout = old_stdout
    f.write(mystdout.getvalue())
    f.close()

    mystdout.seek(0)
    mystdout.truncate(0)


    return send_file("tmp.txt")

工作正常,每次运行时文件都会清除,但网页的输出如下所示: 第一反应

Starting backtracker...
Printing 1 solutions...

          TEAM 1                  TEAM 2
 -------  ----------------------  -------------------
 TOP      Name: BilyBobLongSlong  Name: auzzi29
 MID      Name: balberry13        Name: ZeSwagerWagon
 JUNLGE   Name: Lemme Dunk First  Name: MackAttack599
 ADC      Name: RINK              Name: sptfire128
 SUPPORT  Name: JCKing            Name: rohan72699

第二反应:

Starting backtracker...
Printing 1 solutions...

          TEAM 1                  TEAM 2
 -------  ----------------------  -------------------
 TOP      Name: BilyBobLongSlong  Name: auzzi29
 MID      Name: balberry13        Name: ZeSwagerWagon
 JUNLGE   Name: Lemme Dunk First  Name: MackAttack599
 ADC      Name: RINK              Name: sptfire128
 SUPPORT  Name: JCKing            Name: rohan72699

          TEAM 1                  TEAM 2
 -------  ----------------------  -------------------
 TOP      Name: BilyBobLongSlong  Name: ZeSwagerWagon
 MID      Name: auzzi29           Name: MackAttack599
 JUNLGE   Name: balberry13        Name: JCKing
 ADC      Name: sptfire128        Name: RINK
 SUPPORT  Name: Lemme Dunk First  Name: rohan72699

而每一个回应都会叠加更多。我不太清楚为什么StringIO()会不清晰,因为我每次运行代码时都会将它搜索到0并截断它。。。我很困惑。谢谢!你知道吗

更新:我已经检查了StringIO上的文档,它应该是一个文件。所以我迷路了。我还将StringIO中的内容print()打印到命令行,以排除与临时文件进行某些奇怪交互的可能性,正如所怀疑的那样,打印StringIO是相同的未截断输出。你知道吗

这可能是某种虫子吗?我不明白输出会持续在哪里。。。。六羟甲基三聚氰胺六甲醚。。。。你知道吗


Tags: 文件nametopstdoutsysoldteammid

热门问题