prompt-toolkit / prompt-toolkit/python-prompt-toolkit

asyncio: patch_stdout and initialization errors

Open
#1,213 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

patch-stdout
Dominant language
Python
Stars
10.6k
Forks
815
PR merge metrics
No merged PRs in 30d

Description

Any strings printed before executing await session.prompt_async() don't seem to appear on the console. Is the recommended approach to perform (synchronous) initialization prior to patching stdout?

Below is a simple example, where the Unable to open serial port string is not printed at all (tested on Linux and macOS).

[...]
async def interactive_shell():                                                  
                                                                                
    try:                                                                        
        ser = serial.Serial('/dev/thisportdoesntexist')       
    except SerialError as e:                                     
        print(f"Unable to open serial port: {e.errno}")                            
        return                                                                     
                                                                                   
    # Create Prompt.                                                               
    session = PromptSession(">> ")                                                 
    # Run echo loop. Read text from stdin, and reply it back.                      
    while True:                                                                    
        try:                                                                       
            text = await session.prompt_async()                                    
            print('You said: "{0}"'.format(text))                                  
                                                                                   
            if text == 'q' or text == 'quit':                                      
                break                                                              
                                                                                   
        except (EOFError, KeyboardInterrupt):                                      
            return                                                                 
                                                                                
async def _main():                                                              
    with patch_stdout():                                                        
        try:                                                                    
            await interactive_shell()                                           
        finally:                                                                
            print("caught")                                                     
        print("Quitting event loop. Bye.")                                      
                                                                                
                                                                                
def main():                                                                     
    asyncio.run(_main())               

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the patch_stdout context manager and the prompt_async entry point, then reproduce the provided serial-initialization example on the reported platforms. Determine whether output printed before the first prompt is preserved while stdout is patched, and document or test the expected initialization behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.