On Sat, Feb 2, 2019 at 7:39 AM Dan Sommers <2QdxY4RzWzUUiLuE@potatochowder.com> wrote:
On 2/1/19 2:26 AM, João Matos wrote:
Hello,
Consider adding the option of running shell/console commands inside the REPL. Something like
!dir
(This might be better on python-list rather than here)
I first ran into this in the days of teletypes and dumb terminals, where other programs let you run shell commands from inside them. Now the shoe appears to be on the other foot.
So why not turn that around? ksh (since way back when) and bash (since 2008, according to what I read somewhere online) have "co-processes," which allow you to run a command "in the background," and send commands and receive replies from it. So I tried it with Python, but it didn't work:
$ coproc P3 { python3; } $ echo 'import sys; print(sys.version)' >&${P3[1]} $ read v <&${P3[0]} [the read command just waits forever]
Looks like you may have a problem with output buffering. Try running "python3 -u" to tell it to run stdout/stderr unbuffered - otherwise, Python assumes that its output is going to a file and it won't matter. Alternatively, explicitly flush stdout after output, which could be done with a display hook: _old_hook = sys.displayhook def display(obj): _old_hook(obj) sys.stdout.flush() sys.displayhook = display But unless you're expecting a lot of output, it's probably easier and just as effective to simply use "-u". ChrisA