【问题标题】:How does pdb/ipdb handle the debugging stdin/stdoutpdb/ipdb如何处理调试stdin/stdout
【发布时间】:2016-01-05 07:52:43
【问题描述】:

我有一个运行 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 交互?

【问题讨论】:

    标签: python node.js child-process pdb ipdb


    【解决方案1】:

    好的,我找到了方法...

    不是手动管道流,而是 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]})
    

    没有其他要求。目前还不清楚它会改变什么来产生这样的过程或以后的管道 IO。但这种方法有效,另一种无效。

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 2016-07-10
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多