Python pdb/ipdb如何处理调试stdin/stdout

Python pdb/ipdb如何处理调试stdin/stdout,python,node.js,child-process,pdb,ipdb,Python,Node.js,Child Process,Pdb,Ipdb,我有一个运行python程序的nodejs脚本。我希望能够在调试会话启动时与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.

我有一个运行python程序的nodejs脚本。我希望能够在调试会话启动时与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)
不幸的是,当调试会话启动时,我看不到任何东西,进程只是挂起。我猜pdb/ipdb正在工作,但似乎我所做的任何事情都没有发送到pdb


可以从nodejs与pdb交互吗?

好的,我找到了如何做到这一点

与手动管道流不同,child_进程库是一个选项,似乎只做我需要的事情

文件:

代码变为:

var cp = require('child_process')
var app = cp.spawn('python_app', ['param'], {stdio: [0,1,2]})
不需要其他任何东西。现在还不清楚它会改变什么来产生这样或更高版本的进程。但这种方法有效,而另一种方法无效

我的猜测是,如果我们通过传递文件描述符id直接使用相同的文件描述符,那么我们就不会将数据从一个fd流到另一个fd。这意味着发送到stdin的所有内容都将进入下一个程序,而来自stderr或stdout的任何内容都将从程序进入终端。也就是说,如果我们将数据从一个fd传输到另一个fd,我们可能不会传输所有的数据。终端有一些特殊说明,在配管时可能无法传递给标准DIN或标准DOUT、标准DERR

这个答案对于NodeJS非常具体,但是我想如果我们在python和python之间做同样的事情,我们必须通过传递
sys.[stdin,stdout,stderr]
来对子流程做同样的事情