Skip to content

patch_stdout regression since 2.0.10 #1103

Open
@alexjc

Description

@alexjc

Python: 3.7
Versions: 3.0.0 to 3.0.4
Platform: Windows

Previously on 2.0.10, anything print'd to stdout used to show up in the application in a "log-style" thanks to patch_stdout, but now output is completely suppressed.

I modified the apt-get example to demonstrate this — it should show "Hello world!" every 100 iterations. It works on 2.0.10:

#!/usr/bin/env python
"""
Styled just like an apt-get installation.
"""
import time

from prompt_toolkit.patch_stdout import patch_stdout
from prompt_toolkit.shortcuts import ProgressBar
from prompt_toolkit.shortcuts.progress_bar import formatters
from prompt_toolkit.styles import Style

style = Style.from_dict(
    {
        "label": "bg:#ffff00 #000000",
        "percentage": "bg:#ffff00 #000000",
        "current": "#448844",
        "bar": "",
    }
)


def main():
    custom_formatters = [
        formatters.Label(),
        formatters.Text(": [", style="class:percentage"),
        formatters.Percentage(),
        formatters.Text("]", style="class:percentage"),
        formatters.Text(" "),
        formatters.Bar(sym_a="#", sym_b="#", sym_c="."),
        formatters.Text("  "),
    ]

    with ProgressBar(style=style, formatters=custom_formatters) as pb:
        for i in pb(range(1600), label="Installing"):
            if (i + 1) % 100 == 0:
                print("Hello world!")
            time.sleep(0.001)


if __name__ == "__main__":
    with patch_stdout():
        main()

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions