pdb / ipdb如何处理debuggingstdin / stdout

我有一个运行python程序的nodejs脚本。 我希望能够在debugging会话开始时与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) 

不幸的是,当debugging会话开始时,我没有看到任何东西,过程简单地挂起。 我猜测pdb / ipdb正在工作,但似乎没有任何事情发送到pdb。

可以从nodejs与pdb进行交互吗?

好的,我发现如何做到这一点…

而不是手动pipe道stream,child_proccess库作为一个选项,似乎只是做我所需要的。

文档:

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]}) 

没有其他要求。 目前还不清楚它是如何改变产生像这个或更晚的pipe道IO的过程。 但是这个方法是有效的,而另一个则不行。

我的猜测是,如果我们通过传递文件描述符id直接使用相同的文件描述符。 我们不是将数据从一个fd传输到另一个fd。 这意味着发送给stdin的所有内容都将转到下一个程序,stderr或stdout中的任何内容都将从程序获取到terminal。 也就是说,如果我们将数据从一个fd传输到另一个fd,我们可能不会传输所有内容。 terminal有一些特殊的指示,他们可能不会传递到标准input或stdout,stderr而pipe道。

这个答案对于NodeJS是非常具体的,但是我想如果我们从python到python做同样的事情,我们必须通过传递sys.[stdin, stdout, stderr]来完成与subprocess相同的事情。

Interesting Posts