2016-03-03 11 views
7

Mam wszystkie biblioteki napisane w TCL. Chcę utworzyć GUI w Pythonie, który będzie miał kilka przycisków i innych opcji. W powłoce startowej TCL otworzy się. Kiedy kliknę przyciski, odpowiednie polecenia zostaną wykonane w powłoce TCL.Jak uruchamiać polecenia na tej samej powłoce TCL przy użyciu Pythona

Czy można wystrzelić komendy na tej samej powłoce TCL bez zamykania powłoki TCL.

Przeszukałem google i znajdowałem moduł Tkniter w Pythonie, ale otworzy on powłokę TCL za każdym razem, gdy potrzebuję wykonać polecenie.

+0

Brzmi tak, jak robisz to źle, jeśli tworzysz nowego tłumacza za każdym razem, gdy chcesz wykonać polecenie. To zmaksymalizuje ilość kosztów ogólnych, co jest śmieszne. –

+1

@DonalFellows Przeczytałem to, ponieważ on pyta, jak korzystać z pojedynczego procesu tłumacza TCL. Na przykład. wyraźnie nie uruchamiając za każdym razem nowego procesu. –

+0

Nie. Nie chcę za każdym razem tworzyć nowego tłumacza. Chcę uruchamiać komendy na tej samej starej powłoce TCL – Nitesh

Odpowiedz

2

Można oczywiście używać Tkinter uruchomić serię poleceń w tym samym Tcl tłumacza:

Python 2.7.9 (default, Feb 28 2016, 05:52:45) [C] on sunos5 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import Tkinter 
>>> root = Tkinter.Tk() 
>>> root.tk.eval('set msg "hello world"') 
'hello world' 
>>> root.tk.eval('string length $msg') 
'11' 
>>> root.tk.eval('foreach x {1 2 4} {puts "$msg $x"}') 
hello world 1 
hello world 2 
hello world 4 
'' 
>>> 

- tutaj zmienna MSG jest ustawione w jednej komendy, a jej wartość jest używana w kolejnych poleceń, co nie działa, jeśli tworzyliśmy nowego interpretera dla każdego polecenia. Jeśli nie chcesz, aby okno Tk zostało utworzone, po prostu uruchom root.tk.eval('wm withdraw .'), aby go ukryć.

Jeśli to nie odpowie na twoje pytanie to lepiej wyjaśnić, co jeszcze jest to, że trzeba :-)

+1

Zabawny fakt: Możliwe jest użycie tkintera bez tworzenia okna głównego. Klasa 'Tk' przyjmuje argument słowa kluczowego o nazwie' useTk'. Jeśli ustawisz go na 'False' otrzymasz interpreter tcl bez tk. –

1

Ten problem może być rozwiązany za pomocą Pexpect

Pexpect to moduł Pythona do tarła aplikacji potomnych i automatycznego sterowania nich. Pexpect może być wykorzystywany do automatyzacji interaktywnych aplikacji, takich jak ssh, ftp, passwd, telnet itp. Może być używany do automatyzacji konfiguracji skryptów do powielania instalacji pakietów oprogramowania na różnych serwerach. To może być używane do automatycznego testowania oprogramowania. Pexpect jest w duchu Don Libes 'Expect, ale Pexpect jest czystym Pythonem. Inne moduły Expect-podobne dla Pythona wymagają TCL i Oczekiwania lub wymagają kompilacji rozszerzeń C. Pexpect nie używa rozszerzeń C, Expect lub TCL. Powinien działać na każdej platformie obsługującej standard standardowego modułu Ptyty PTY. Interfejs Pexpect koncentruje się na łatwości obsługi, dzięki czemu proste zadania są proste.

Przykład użycia zaczerpnięte bezpośrednio ze strony internetowej Pexpect

child = pexpect.spawn('scp foo [email protected]:.') 
child.expect ('Password:') 
child.sendline (mypassword) 

można tarło terminal jako procesu potomnego, a następnie użyć tego dziecka do wysyłania poleceń gdy GUI generuje zdarzenie.

+1

Pytający mówi, że ma już biblioteki napisane w Tcl, które musi wywołać z Pythona. Oczekiwana funkcjonalność stylu nie ma tutaj znaczenia. –

+0

Tak, to prawda, ale myślę, że można to osiągnąć przez powiązanie zdarzeń generowanych po kliknięciu przycisku w GUI Pythona z instrukcjami o oczekiwaniach. – Sharad

+0

Proszę, rozwiń go, jeśli czegoś tu brakuje. – Sharad

0

Stworzyłem ten prosty program tcl pgm.tcl

puts "Hello world" 

mogę uruchomić go w konsola

tclsh pgm.tcl 

Oto jak może być uruchomiony w python

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) 

Ta odpowiedź zależy od systemu operacyjnego (Linux), ale powinieneś być w stanie dostosować ją do innego systemu operacyjnego.

Powiązane problemy