簡體   English   中英

如何從stdin獲取輸入,使用curses顯示內容並輸出到stdout?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM