web-dev-qa-db-fra.com

Setupterm n'a pas pu trouver la borne, IN Python Programme à l'aide de malédictions

J'essaie d'obtenir un script de Curseys simple à exécuter en utilisant Python (avec Pycharm 2.0).

Ceci est mon script:

import curses
stdscr = curses.initscr()
curses.noecho()
curses.cbreak()
stdscr.keypad(1)
while 1:
    c = stdscr.getch()
    if c == ord('p'): print("I pressed p")
    Elif c == ord('q'): break

curses.nocbreak(); stdscr.keypad(0); curses.echo()
curses.endwin()

Quand j'exécute cela de mon IDE (Pycharm 2), j'obtiens l'erreur suivante:

[.____] 
_curses.error: setupterm: could not find terminal
Process finished with exit code 1

Si j'exécute le script de bash, il sera simplement bloqué dans la boucle tandis que la boucle ne réagit pas à appuyer sur P ou Q.

Toute aide serait appréciée.

31
user1017102

Vous devez définir des variables envioment TERM et TERMINFO, comme celui-ci:

export TERM=linux
export TERMINFO=/etc/terminfo

Et, si votre appareil n'a pas ce dir (/etc/terminfo), faites-la et copiez la base de données TerminFo.

Pour les terminaux "Linux" et "PCANSI", vous pouvez télécharger la base de données:

24
irk_coder

Aller à la configuration de course/débogage (celui à côté du bouton d'exécution Pycham). Coller sur la prise d'émulation de la console de sortie. Ensuite, vous pourrez exécuter votre programme avec le bouton Run.

13
Trieu Nguyen

J'ai trouvé cette question lors de la recherche d'exemples car j'apprends également à utiliser des malédictions, donc je ne sais pas grand chose à ce sujet. Je sais que cela fonctionne cependant:

import curses
try:
    stdscr = curses.initscr()
    curses.noecho()
    curses.cbreak()
    stdscr.keypad(1)
    while 1:
        c = stdscr.getch()
        if c == ord('p'):
            stdscr.addstr("I pressed p")
        Elif c == ord('q'): break
finally:
    curses.nocbreak(); stdscr.keypad(0); curses.echo()
    curses.endwin()

J'ai aussi ajouté l'essai: Enfin: assurez-vous d'obtenir le terminal à son apparition d'origine, même si quelque chose de simple passe mal à l'intérieur de la boucle.

Vous devez utiliser l'addstr pour vous assurer que le texte va être affiché à l'intérieur de la fenêtre.

1
rui

J'avais le même problème. Voir Programmation des malédictions avec Python - Démarrage et fin d'une application de malédiction .

Il y a une fonction curses.wrapper() qui simplifie le processus de démarrage/de fin d'une application de malédiction.

Voici l'exemple du Python doc:

[.____] Du wrapper d'importation de malédictions 
 
 Def Main (STDSCR): 
 # Écran clair [.____] () 
 # Cela soulève ZerodiVisionError lorsque je == 10. [.____] Pour i dans la plage (0, 11): [.____] V = I-10 [.____] (i, 0 , '10 divisé par {} est {} '. Format (V, 10/V)) [.____] [.____] [. ____] STDSCR.Refresh () [.____] () 
 
 Wrapper (principal) 
1
Zachary Wilson

Si vous utilisez des macos et que vous exécutez Pycham, vous devrez définir des variables d'environnement à partir du IDE =, pour une portée d'exécution.

Modifier les configurations -> Variables d'environnement

ajoutez ensuite les paires de valeur de nom ci-dessous

Terme Linux

Terminfo/etc/ZSH

Ce qui précède est équivalent à l'exportation d'un environnement variable de la console qui se fait comme ça

$ export TERM=linux
$ export TERMINFO=/bin/zsh

la valeur par défaut du terme est Xterm, d'autres valeurs sont [Konsole, RXVT] RXVT par exemple est souvent construite avec support pour 16 couleurs. Vous pouvez essayer de définir le terme à RXVT-16Color.

/ bin/zsh est le chemin de l'application terminale que j'utilise dans Mac.

C'est comme si vous indiquez à votre programme que vous vous connecterez à Linux (terme) comme le terminal que vous pouvez trouver à/bin/zsh. Pour utiliser une coquille bash, cela pourrait être quelque chose comme/bin/bash.

0
hassan_ashraf

Vous verrez cette erreur si vous utilisez le ralenti. C'est à cause de la redirection par défaut de l'entrée/de sortie de Highle. Essayez d'exécuter votre programme de la ligne de commande. python3 <filename>.py

0
Clarius