stderr设置不正确是导致程序中缺少输出的原因除了猜测之外,还有没有合适的方法来找出这个原因?

vhmi4jdf  于 2021-10-10  发布在  Java
关注(0)|答案(0)|浏览(162)

我已经找到了python代码失败的原因,但我是偶然发现的。因此,我在这里问你,如果你是我,你将如何调试程序。下面,我将讲述我的程序中的错误,提供错误代码,以及我如何调试并发现代码中隐藏的问题。
该代码是一个python代码,其中包含node.js子进程。当子流程运行时,python将打印它提供的所有内容。如果有“正确选择”字符串,它将打印“nice”。问题是“很好”,从来没有打印过。
a、 js

num = 98
async function f(){
    // Check condition
    for(var i = 0; i < 10;i++){
        await sleep(4000);
        if (num < 100) {
            console.log("Enter number greater then 100");
            num++;
        }
        else {
            console.error("correct choice");
        }

    }
}
function sleep(ms) {
    return new Promise((resolve) => {
      setTimeout(resolve, ms);
    });
}
f();

b、 派克

import subprocess, sys
process = subprocess.Popen(['node', 'A.js'], bufsize=0, stdout=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True)

for line in iter(process.stdout.readline, ''):

    print(line)
    sys.stdout.flush()
    if line.startswith("correct choice"):
        print("NICE.")
    else:
        continue  # skip it

我是如何找到答案的:我尝试了线程化,然后将所有读到的内容都附加到列表中。然后,我发现“正确的选择”不在列表中,而是奇怪地打印出来。然后,完全通过猜测,我发现问题在于subprocess.popen()中缺少“stderr=subprocess.stdout”。
再一次,您将如何调试上面的代码,并修复丢失的“nice”?当你回答这个问题时,试着忘记我提到的解决方案和调试过程。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题