Skip to content

Please add argument to override stdin/out/err in the input builtin #75784

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
wt mannequin opened this issue Sep 27, 2017 · 10 comments
Closed

Please add argument to override stdin/out/err in the input builtin #75784

wt mannequin opened this issue Sep 27, 2017 · 10 comments
Labels

Comments

@wt
Copy link
Mannequin

wt mannequin commented Sep 27, 2017

BPO 31603
Nosy @bitdancer, @wt, @serhiy-storchaka, @csabella, @tonybaloney, @iritkatriel
PRs
  • bpo-31603 Add file args to input builtin #3814
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2017-09-27.06:34:07.094>
    labels = ['3.7', 'expert-IO']
    title = 'Please add argument to override stdin/out/err in the input builtin'
    updated_at = <Date 2022-01-20.18:29:21.436>
    user = 'https://github.com/wt'

    bugs.python.org fields:

    activity = <Date 2022-01-20.18:29:21.436>
    actor = 'wt'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['IO']
    creation = <Date 2017-09-27.06:34:07.094>
    creator = 'wt'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 31603
    keywords = ['patch']
    message_count = 9.0
    messages = ['303103', '303105', '303132', '303135', '303297', '338208', '341587', '410816', '411041']
    nosy_count = 6.0
    nosy_names = ['r.david.murray', 'wt', 'serhiy.storchaka', 'cheryl.sabella', 'anthonypjshaw', 'iritkatriel']
    pr_nums = ['3814']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue31603'
    versions = ['Python 3.7']

    @wt
    Copy link
    Mannequin Author

    wt mannequin commented Sep 27, 2017

    I would really love to add a few params to input so that it's signature looked more like so:

    def input(prompt, /, *, fin=sys.stdin, fout=sys.stdout, ferr=sys.stderr):
        ...

    This would certainly make overriding the the files in specific calls to input easier. A reasonable use case is collecting a piece over /dev/tty explicitly so that a redirected stdin could be used to pipe data into a program while overriding using /dev/tty to collect some piece of data. Here's some code illustrating what I'd like:

    import sys
    sys.stdin.close()
    sys.stdin = open('/dev/null', 'r')
    with open('/dev/tty', 'r') as f:
        x = input('Name? ', fin=f)
    print(x)

    FWIW, I have actually already implemented this fully (including tests). I am just trying to see what I need to do to allow release since I am work on my employer's time.

    In the interest of getting feedback, does the signature provided above look sane?

    @wt wt mannequin added 3.7 (EOL) end of life topic-IO labels Sep 27, 2017
    @wt
    Copy link
    Mannequin Author

    wt mannequin commented Sep 27, 2017

    This might also allow simplification of the getpass.unix_getpass() logic. I am not 100% sure about that yet though.

    @bitdancer
    Copy link
    Member

    This is probably a topic for the python-ideas mailing list. For example, rather than complicating input, it might be better to propose adding a redirect_stdin to contextlib to parallel the two existing redirect context managers. I don't remember why that was not added when the others were, but there was probably a reason, so a discussion about what the best solution is for the use case is in order, and python-ideas is the place for that.

    @serhiy-storchaka
    Copy link
    Member

    input() is a convenient function for simple user interaction. If you need to read a data from different file object just use its readline() method.

    @wt
    Copy link
    Mannequin Author

    wt mannequin commented Sep 29, 2017

    Added a PR to facilitate discussion on python-ideas.

    @csabella
    Copy link
    Contributor

    For reference, here's the link to the Python ideas thread:

    https://mail.python.org/pipermail/python-ideas/2017-September/047230.html

    @tonybaloney
    Copy link
    Mannequin

    tonybaloney mannequin commented May 6, 2019

    The discussion on python-ideas has some unresolved questions. Wren, did you get a definitive answer on this idea?

    @iritkatriel
    Copy link
    Member

    See also bpo-1927.

    @wt
    Copy link
    Mannequin Author

    wt mannequin commented Jan 20, 2022

    I'm not sure that I ever got a definitive issue, but I didn't have time to
    push it forward. I still think the idea has merit. I'd love to see it
    implemented, but I don't have the time to pursue it right now.

    Thanks,
    wt

    On Mon, Jan 17, 2022 at 10:23 AM Irit Katriel <report@bugs.python.org>
    wrote:

    Irit Katriel <iritkatriel@gmail.com> added the comment:

    See also bpo-1927.

    ----------
    nosy: +iritkatriel


    Python tracker <report@bugs.python.org>
    <https://bugs.python.org/issue31603\>


    @iritkatriel
    Copy link
    Member

    [...] I don't have the time to pursue it right now.

    Thanks, wt

    Thank you.

    @iritkatriel iritkatriel closed this as not planned Won't fix, can't repro, duplicate, stale Oct 29, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    Projects
    None yet
    Development

    No branches or pull requests

    4 participants