devpyshell: python3: flush stdout explicitly
Opening text stream in unbuffered mode raises the following exception In Python 3: ValueError: can't have unbuffered text I/O Fixed by leaving std* streams in text mode and flushing stdout explicitly. (From OE-Core rev: 732001cb268683f5b56e251e2964ec5b694a2147) Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
250955ab8c
commit
e8feb1976a
|
@ -65,8 +65,6 @@ def devpyshell(d):
|
||||||
os.dup2(m, sys.stdout.fileno())
|
os.dup2(m, sys.stdout.fileno())
|
||||||
os.dup2(m, sys.stderr.fileno())
|
os.dup2(m, sys.stderr.fileno())
|
||||||
|
|
||||||
sys.stdin = os.fdopen(sys.stdin.fileno(), 'r', 0)
|
|
||||||
|
|
||||||
bb.utils.nonblockingfd(sys.stdout)
|
bb.utils.nonblockingfd(sys.stdout)
|
||||||
bb.utils.nonblockingfd(sys.stderr)
|
bb.utils.nonblockingfd(sys.stderr)
|
||||||
bb.utils.nonblockingfd(sys.stdin)
|
bb.utils.nonblockingfd(sys.stdin)
|
||||||
|
@ -92,6 +90,7 @@ def devpyshell(d):
|
||||||
else:
|
else:
|
||||||
prompt = ps1
|
prompt = ps1
|
||||||
sys.stdout.write(prompt)
|
sys.stdout.write(prompt)
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
# Restore Ctrl+C since bitbake masks this
|
# Restore Ctrl+C since bitbake masks this
|
||||||
def signal_handler(signal, frame):
|
def signal_handler(signal, frame):
|
||||||
|
@ -113,6 +112,7 @@ def devpyshell(d):
|
||||||
continue
|
continue
|
||||||
except EOFError as e:
|
except EOFError as e:
|
||||||
sys.stdout.write("\n")
|
sys.stdout.write("\n")
|
||||||
|
sys.stdout.flush()
|
||||||
except (OSError, IOError) as e:
|
except (OSError, IOError) as e:
|
||||||
if e.errno == 11:
|
if e.errno == 11:
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -29,9 +29,6 @@ if len(sys.argv) != 3:
|
||||||
pty = open(sys.argv[1], "w+b", 0)
|
pty = open(sys.argv[1], "w+b", 0)
|
||||||
parent = int(sys.argv[2])
|
parent = int(sys.argv[2])
|
||||||
|
|
||||||
# Don't buffer output by line endings
|
|
||||||
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
|
|
||||||
sys.stdin = os.fdopen(sys.stdin.fileno(), 'r', 0)
|
|
||||||
nonblockingfd(pty)
|
nonblockingfd(pty)
|
||||||
nonblockingfd(sys.stdin)
|
nonblockingfd(sys.stdin)
|
||||||
|
|
||||||
|
@ -64,6 +61,7 @@ try:
|
||||||
# Write a page at a time to avoid overflowing output
|
# Write a page at a time to avoid overflowing output
|
||||||
# d.keys() is a good way to do that
|
# d.keys() is a good way to do that
|
||||||
sys.stdout.write(i[:4096])
|
sys.stdout.write(i[:4096])
|
||||||
|
sys.stdout.flush()
|
||||||
i = i[4096:]
|
i = i[4096:]
|
||||||
if sys.stdin in ready:
|
if sys.stdin in ready:
|
||||||
echonocbreak(sys.stdin.fileno())
|
echonocbreak(sys.stdin.fileno())
|
||||||
|
|
Loading…
Reference in New Issue