首页 > 解决方案 > 未正确设置 stderr 是我的程序中缺少输出的原因。除了猜测之外,有没有合适的方法来找出这个原因?

问题描述

我已经找到了我的 Python 代码失败的原因,但我偶然发现了它。因此,我在这里问如果你是我,你将如何调试程序。下面,我将讲述我的程序中的错误,提供错误代码,以及我如何调试和发现我的代码隐藏的问题。

代码是 Python 代码,里面有一个 Node.JS 子进程。当子进程运行时,Python 会打印它提供的所有内容。如果有“正确选择”字符串,则打印“NICE.”。错误是“NICE”。从不打印。

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();

py

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.”?试着忘记我在回答这个问题时提到的解决方案和调试过程。

标签: pythonnode.jsdebuggingsubprocessstderr

解决方案


推荐阅读