Issue33749
Created on 2018-06-03 12:03 by m01, last changed 2022-04-11 14:59 by admin. This issue is now closed.
| Messages (3) | |||
|---|---|---|---|
| msg318536 - (view) | Author: Michiel (m01) * | Date: 2018-06-03 12:03 | |
It looks like there's possibly a typo/small bug in the pdb.Pdb code. If I supply the stdin argument to the constructor, and provide e.g. a io.StringIO object, then I expect commands to be read from there. This however doesn't happen. If I additionally supply a stdout argument, then it works. This is because use_rawinput is only disabled if stdout is specified, see https://github.com/python/cpython/blob/3.7/Lib/pdb.py#L144: ... def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False, readrc=True): bdb.Bdb.__init__(self, skip=skip) cmd.Cmd.__init__(self, completekey, stdin, stdout) if stdout: self.use_rawinput = 0 ... I think it should be disabled if stdin is supplied, or possibly if either is specified (I'm not sure). Repro: import pdb import io pdb_script = io.StringIO("p 'hello';; c") output = io.StringIO() Buggy behaviour: In [5]: pdb.Pdb(stdin=pdb_script).set_trace() --Call-- > /usr/lib/python3.6/site-packages/IPython/core/displayhook.py(247)__call__() -> def __call__(self, result=None): (Pdb) c Expected behaviour: (Pdb) 'hello' Working if stdout is supplied: In [6]: pdb_script.seek(0) Out[6]: 0 In [7]: pdb.Pdb(stdin=pdb_script, stdout=output).set_trace() In [8]: print(output.getvalue()) --Call-- > /usr/lib/python3.6/site-packages/IPython/core/displayhook.py(247)__call__() -> def __call__(self, result=None): (Pdb) 'hello' I would've had a go at fixing this, but even after reading the docs at https://docs.python.org/3/library/cmd.html#cmd.Cmd.use_rawinput it's not entirely obvious to me which combinations of stdin/stdout overrides should be valid and when use_rawinput should be set to 0. However, I'm pretty sure it should at least be set to 0 if stdin is supplied, which currently isn't the case. |
|||
| msg318559 - (view) | Author: Michiel (m01) * | Date: 2018-06-03 15:37 | |
Based on code inspection, this affects 2.7 - current master |
|||
| msg318587 - (view) | Author: R. David Murray (r.david.murray) * ![]() |
Date: 2018-06-03 22:45 | |
This is a duplicate of 2571 and 10396. As I commented in 10396, if you want to work on an enhancement request (for cmd) that improves the situation, it will be welcome; but as you observed what to do isn't immediately obvious, so discussion before implementation is probably a good idea. I'm going to close this, but feel free to open an enhancement issue with a proposal. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:59:01 | admin | set | github: 77930 |
| 2018-06-03 22:45:42 | r.david.murray | set | superseder: can cmd.py's API/docs for the use of an alternate stdin be improved? |
| 2018-06-03 22:45:19 | r.david.murray | set | status: open -> closed nosy:
+ r.david.murray resolution: duplicate |
| 2018-06-03 15:37:39 | m01 | set | messages:
+ msg318559 versions: + Python 2.7, Python 3.4, Python 3.5, Python 3.7, Python 3.8 |
| 2018-06-03 12:03:45 | m01 | create | |
