Python的check\u output方法有时不返回输出

2024-04-24 00:03:45 发布

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

我有一个Python脚本,它应该运行大量其他脚本,每个脚本都位于脚本工作目录的子目录中。其他每个脚本都应该连接到一个游戏客户端,并为该游戏运行一个AI。为了运行这个脚本,我必须在两个独立的线程上运行每个脚本(每个播放器一个线程)。我遇到的问题是,有时脚本的输出没有被捕获。我的运行代码如下所示:

def run(command, name, count):
    chdir(name)
    output = check_output(" ".join(command), stderr = STDOUT, shell = True).split('\r')
    chdir('..')
    with open("results_" + str(count) + ".txt", "w") as f:
        for line in output:
            f.write(line)

奇怪的是,它确实能捕捉到较长的流,但较短的流却没有被注意到。如何更改代码以解决此问题?你知道吗

更新:我不认为这是缓冲问题,因为check_output("ls ..", shell = True).split('\n')[:-1]返回预期结果,并且该命令所用的时间应该比我尝试运行的脚本少很多。你知道吗

更新2:我发现,由于运行时间较长,产量正在减少。结果是,由于某种原因,我运行的所有进程都错过了输出的结尾。这也解释了为什么较短的运行根本不产生任何输出。你知道吗


Tags: 代码name目录脚本trueoutputcheckcount