【问题标题】:non block read failed on stdout for pythonpython的标准输出上的非块读取失败
【发布时间】:2019-11-19 18:09:49
【问题描述】:

我希望能够将 pdb 用作子进程,输入调试运算符,并获得其输出。我发现 fcntl 可能会有所帮助,但令我惊讶的是,它适用于 gdb 等其他程序,但是当 cmd 为“python”或 [“python”、“-m”、“pdb”、“computer.py”时],这是行不通的。

我将 cmd 替换为 'gdb' 或其他程序,它都适用于 fcntl。 但仅当 cmd 与“python”相关时才会失败。

Popen(['python', '-m', 'pdb', 'computer.py'], stdin=PIPE, stdout=PIPE, shell = False)

标志 = fcntl(p.stdout.fileno(), F_GETFL) fcntl(p.stdout.fileno(), F_SETFL, flags | O_NONBLOCK)

预期的结果是我可以正确获取标准输出。

【问题讨论】:

    标签: python subprocess nonblocking


    【解决方案1】:

    加上“-u”参数。 -u :无缓冲的二进制标准输出和标准错误;还有 PYTHONUNBUFFERED=x 有关与“-u”相关的内部缓冲的详细信息,请参见手册页

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      相关资源
      最近更新 更多