python - 未正确设置 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.”?试着忘记我在回答这个问题时提到的解决方案和调试过程。
解决方案
推荐阅读
- python - 我们应该使用装饰器还是上下文管理器来处理 Maya 中的撤消队列?
- flutter - 模拟来自同一类的函数,在颤振中进行测试
- java - 从 BufferedWriter 断开后端 Writer
- html - LinkedIn 不正确的链接图片
- python - 重置以前选择一个选项
- java - 我的 recyclerview 显示双重联系人如果号码相同,如何只获得一个联系人,然后它只显示一个用户联系人而不是双重联系人
- javascript - Jest testing src 将 localhost 添加到我的字符串中
- reactjs - Next.js 基于正则表达式的重定向 URL 不起作用
- javascript - 包含两个单独数字的正则表达式密码
- android - 如何将LOG.i()存储到android studio中的roomdatabase