[英]Using set input for stdin based on output from stdout with python subprocess
[英]How to take input from stdin, display something using curses and output to stdout?
我正在嘗試制作一個從 stdin 獲取輸入的 python 腳本,使用curses在終端中顯示GUI,然后當用戶完成交互時將結果輸出到stdout。 這種行為的一個很好的例子是selecta但它是用 ruby 編寫的。
我不能讓詛咒顯示任何東西。 這是我迄今為止嘗試過的最小示例(它只顯示一個字符並等待一個字符):
import os, sys
import curses
c = None
old_out = sys.__stdout__
old_in = sys.__stdin__
old_err = sys.__stderr__
sys.__stdout__ = sys.stdout = open('/dev/tty', 'w')
sys.__stdin__ = sys.stdin = open('/dev/tty')
sys.__stderr__ = sys.stderr = open('/dev/tty')
def show_a(s):
global c
s.addch(ord('a'))
c = s.getch()
curses.wrapper(show_a)
sys.stdin.flush()
sys.stdout.flush()
sys.stderr.flush()
sys.stdin.close()
sys.stdout.close()
sys.stderr.close()
sys.__stdout__ = sys.stdout = old_out
sys.__stdin__ = sys.stdin = old_in
sys.__stderr__ = sys.stderr = old_err
print(c)
當我嘗試使用echo $(python3 show_a.py)
沒有顯示任何內容,但按任意鍵后顯示其編號:
這樣的事情甚至可以使用詛咒,如果是這樣,該怎么做?
它不起作用,因為print
語句正在寫入與curses.wrapper
相同的標准輸出。 您可以將print
推遲到恢復sys.stdout
,或者您可以使用file=
屬性,如下所示:
printf(s.getch(), file=old_out)
對於另一個(排序)問題,聽起來好像您需要修改代碼以在getch
之后進行刷新(以使curses 顯示它),並且根據curses 的版本,標准輸出的刷新將是有幫助。
進一步閱讀:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.