Skip to content

bpo-13214: raise EOFError in Lib/cmd.py #17074

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from

Conversation

kimbo
Copy link

@kimbo kimbo commented Nov 7, 2019

The current behavior of the cmd module is to return the string 'EOF'
when the program receives an EOF (e.g. when you press ctrl + d,
or when the end of a file is reached). When you're writing some kind of
REPL, you often want to exit when when you get an EOF (for example,
python's REPL exits when you press ctrl + d). The way to
achieve that functionality here is to create a function
called do_EOF in your subclass of cmd.Cmd, and call exit()
If you want some other behavior when you get an EOF, you can put
that in do_EOF instead.

This is problematic for two main reasons:

  1. EOF shows up as an undocumented command when you type help. It's
    not that big of a deal, but it's definitely not ideal (and perhaps
    confusing).
  2. If you type EOF into the terminal, it will call your do_EOF
    function. If your do_EOF function exits, typing do_EOF will exit the
    program. Seems rather silly.

I propose the cmd class NOT catch the EOFError. That will eliminate both
of the above problems.

See also https://bugs.python.org/issue13214 and #13536

https://bugs.python.org/issue13214

The current behavior of the cmd module is to return the string 'EOF'
when the program receives an EOF (e.g. when you press ctrl + d,
or when the end of a file is reached). When you're writing some kind of
REPL, you often want to exit when when you get an EOF (for example,
python's REPL exits when you press ctrl + d). The way to
achieve that functionality here is to create a function
called `do_EOF` in your subclass of `cmd.Cmd`, and call `exit()`
If you want some other behavior when you get an EOF, you can put
that in `do_EOF` instead.

This is problematic for two main reasons:

1. `EOF` shows up as an undocumented command when you type `help`. It's
not that big of a deal, but it's definitely not ideal (and perhaps
confusing).
2. If you type `EOF` into the terminal, it will call your `do_EOF`
function. If your `do_EOF` function exits, typing `do_EOF` will exit the
program. Seems rather silly.

I propose the cmd class NOT catch the EOFError. That will eliminate both
of the above problems. I realize this could be an issue with backwards
compatibility and such, but I don't think it would require much
adjustment (maybe a couple lines).

See also https://bugs.python.org/issue13214 and
python#13536
@the-knights-who-say-ni
Copy link

Hello, and thanks for your contribution!

I'm a bot set up to make sure that the project can legally accept this contribution by verifying everyone involved has signed the PSF contributor agreement (CLA).

Recognized GitHub username

We couldn't find a bugs.python.org (b.p.o) account corresponding to the following GitHub usernames:

@kimbo

This might be simply due to a missing "GitHub Name" entry in one's b.p.o account settings. This is necessary for legal reasons before we can look at this contribution. Please follow the steps outlined in the CPython devguide to rectify this issue.

You can check yourself to see if the CLA has been received.

Thanks again for the contribution, we look forward to reviewing it!

@kimbo
Copy link
Author

kimbo commented Nov 7, 2019

i signed the CLA and created a BPO account with my gh username

@kimbo
Copy link
Author

kimbo commented Nov 11, 2019

On the other hand, it might break less things to add in #13536. Closing this because I don't think it would be worth it to break everyone's existing subclasses of cmd.Cmd.

@kimbo kimbo closed this Nov 11, 2019
@kimbo kimbo deleted the kl/raise-EOFError-in-cmd branch November 11, 2019 13:44
@positron96
Copy link

I'd also find the current situation with EOFs uncomfortable to use

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants