python - pdb/ipdb 如何处理调试 stdin/stdout

标签 python node.js child-process pdb ipdb

我有一个运行Python程序的nodejs脚本。我希望能够在调试 session 启动时与 pdb 进行交互。

我用它来开始我的过程:

  var cp = require('child_process')
  var app = cp.spawn('python_app', ['param'])
  app.stdout.pipe(process.stdout)
  app.stderr.pipe(process.stderr)                         
  process.stdin.pipe(app.stdin)

不幸的是,当调试 session 开始时,我看不到任何东西,进程只是挂起。我猜 pdb/ipdb 正在工作,但似乎我所做的任何事情都没有发送到 pdb。

是否可以从nodejs与pdb交互?

最佳答案

好的,我找到了该怎么做...

child_process 库作为一个选项,似乎可以满足我的需要,而不是手动管道流。

文档:

https://nodejs.org/api/child_process.html#child_process_options_stdio

代码变为:

var cp = require('child_process')
var app = cp.spawn('python_app', ['param'], {stdio: [0,1,2]})

不需要其他任何东西。目前还不清楚它会改变什么来产生这样的进程或以后的管道 IO。但这个方法有效,而另一个则无效。

我的猜测是,如果我们通过传递文件描述符 id 直接使用相同的文件描述符。我们不会将数据从一个文件传输到另一个文件。这意味着发送到 stdin 的所有内容都将到达下一个程序,而来自 stderr 或 stdout 的任何内容都将从程序到达终端。也就是说,如果我们将数据从一个文件传输到另一个文件,我们可能不会传输所有内容。终端有一些特殊指令,在管道传输时它们可能不会传递到 stdin 或 stdout、stderr。

这个答案是针对 NodeJS 的,但我想如果我们从 python 到 python 做同样的事情,我们就必须通过传递 sys.[stdin, stdout, stderr] 对子进程做同样的事情。 .

关于python - pdb/ipdb 如何处理调试 stdin/stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34606638/

相关文章:

python - 以新格式重新组合 JSON 文件

python - 如何在 Python 单元测试中将模拟对象注入(inject)实例属性

python - 单击按钮后交换标签

javascript - 使用异步在 Node JS 中一个接一个地下载视频?

即使在关闭其输入后,子进程也会挂起

javascript - Node js子进程删除多个文件

python - 使用 BeautifulSoup [gurufocus 站点] 抓取不一致构建的表

javascript - 缓存原型(prototype)函数不会缓存它所属的对象

node.js - 如何将 Express NodeJS 项目部署到 Centos 服务器?

Electron app.relaunch() 松散标准输入输出