7
votes

Comment exécuter des commandes sur la même coquille TCL à l'aide de Python

J'ai toutes les bibliothèques écrites dans TCL. Je veux créer une interface graphique à Python qui aura peu de boutons et d'autres options. Dans le shell de démarrage TCL s'ouvrira. Lorsque je cliquerai sur les boutons, les commandes respectives seront exécutées sur la coque TCL.

est-il possible de tirer des commandes sur la même coquille de TCL sans fermer la coque TCL.

J'ai recherché Google et Recherche Tkniter Module en Python, mais il ouvrira la coque TCL à chaque fois que je dois exécuter la commande.


4 commentaires

Cela me semble tort que vous le faites mal si vous faites un nouvel interprète chaque fois que vous souhaitez exécuter une commande. Cela maximise la quantité de frais généraux ridicules.


@Donalfellows Je l'ai lu car il vous demande comment utiliser un seul processus d'interprétation TCL. Par exemple. explicitement ne pas lancer un nouveau processus à chaque fois.


Non, je ne veux pas faire de nouveaux interprètes à chaque fois. Je veux exécuter des commandes sur la même vieille coquille TCL


Je fais ce genre de chose utilisant os.startfile (cmd) où, par exemple, cmd = 'copier myfile.txt c: \\ utilisateurs \\ \ \ philip \\ bureau'


3 Réponses :


1
votes

Ce problème peut être résolu en utilisant PEXPEPT

PEXPECT est un module Python pour accumuler des applications enfants et contrôler eux automatiquement. PEXPECT peut être utilisé pour automatiser les applications interactives tels que SSH, FTP, PASSWD, TELNET, etc. Il peut être utilisé pour automatiser la configuration Scripts pour la duplication des installations de packages logiciels sur différents serveurs. Ce Peut être utilisé pour les tests de logiciels automatisés. PEXPECT est dans l'esprit de Don LIBES Attends, mais PEXPECT est pur python. Autres modules d'attente de type pour Python exiger que TCL et attendre ou nécessiter des extensions C puissent être compilées. PEXPECT NE PAS Utilisez des extensions C, attendre ou TCL. Il devrait fonctionner sur n'importe quelle plate-forme qui supporte Le module standard Python PTY. L'interface PEXPECT est axée sur la facilité d'utilisation afin que des tâches simples sont faciles. p> blockQquote>

Exemple d'utilisation prise directement à partir du site Web PEXPPEPT P>

child = pexpect.spawn('scp foo myname@host.example.com:.')
child.expect ('Password:')
child.sendline (mypassword)


3 commentaires

Le questionneur dit qu'il a déjà écrit des bibliothèques dans TCL qu'il a besoin d'appeler de Python. Attendez-vous, la fonctionnalité de style n'est pas pertinente ici.


Oui, c'est vrai, mais je pense que cela peut être accompli en associant les événements générés sur un bouton sur un bouton de l'interface graphique Python avec des déclarations.


S'il vous plaît développer dessus s'il y a quelque chose que je manque ici ici



2
votes

Vous pouvez certainement utiliser Tkinter pour exécuter une série de commandes dans le même interpréteur TCL: xxx

- Ici, la variable msg est définie dans une commande et sa valeur est utilisée dans des commandes ultérieures, Ce qui ne fonctionnerait pas si nous créions un nouvel interprète pour chaque commandement. Si vous ne voulez pas que la fenêtre TK soit créée, il suffit d'exécuter root.tk.eval ("wm se retirer") pour le masquer.

Si cela ne le fait pas Répondez à votre question que vous feriez mieux d'expliquer ce que vous avez besoin d'autre que vous avez besoin: -)


1 commentaires

Fait amusant: il est possible d'utiliser Tkinter sans créer la fenêtre racine. La classe tk prend un argument de mot clé nommé USETK . Si vous le définissez sur FALSE , vous obtiendrez un interprète TCL sans TK.



0
votes

J'ai créé ce programme TCL simple pgm.tcl code> xxx pré>

i peut le lancer dans une console p> xxx pré> P> Voici comment il peut être lancé dans Python P>

from subprocess import Popen, PIPE
p1 = Popen( ['tclsh', 'pgm.tcl'], stdout=PIPE )
p1out, p1err = p1.communicate()
if p1out is not None: print (p1out)
if p1err is not None: print (p1err)


0 commentaires