[prev in list] [next in list] [prev in thread] [next in thread] 

List:       python-ideas
Subject:    [Python-ideas] Fwd: Re:  Running Python commands from a Shell
From:       Dan Sommers <2QdxY4RzWzUUiLuE () potatochowder ! com>
Date:       2019-02-01 21:18:42
Message-ID: efc0f7bc-261d-e289-fcad-1b4ddf39dde4 () potatochowder ! com
[Download RAW message or body]





On 2/1/19 2:51 PM, Chris Angelico wrote:
> 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".

I thought about the output buffering, but it fails in the same
way even if I send a quit() command to the process, and I still
don't see any output in the tee file.  OTOH, if I use "-i," then
it works.  So it's probably not a simple buffering problem, but
at least I have a workaround.

Thanks,
Dan

(Sorry, Chris, for mis-sending this the first time.  Sadly,
my email client isn't perfect when it comes to recognizing
and replying to mailing list messages.)
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic