我正在使用TCL编写所有库。我想在Python中创建一个GUI,它只有很少的按钮和其他选项。在开始TCL shell将打开。当我单击按钮时,将在TCL shell上执行相应的命令。
是否可以在不关闭TCL shell的情况下在TCL的同一shell上触发命令。
我搜索了谷歌并在Python中找到Tkniter
模块,但每次我需要执行命令时它都会打开TCL shell。
答案 0 :(得分:2)
您当然可以使用Tkinter在同一个Tcl解释器中运行一系列命令:
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
''
>>>
- 这里变量msg在一个命令中设置,其值在后面的命令中使用,如果我们为每个命令创建一个新的解释器,这将不起作用。
如果您不想创建Tk窗口,只需运行root.tk.eval('wm withdraw .')
即可隐藏它。
如果这不能回答您的问题,您最好解释一下您还需要什么: - )
答案 1 :(得分:1)
使用Pexpect
可以解决此问题Pexpect是一个用于生成子应用程序和控制的Python模块 他们自动。 Pexpect可用于自动化交互式应用程序 例如ssh,ftp,passwd,telnet等。它可以用于自动化设置 用于在不同服务器上复制软件包安装的脚本。它 可用于自动化软件测试。 Pexpect是唐的精神 Libes'期待,但Pexpect是纯Python。其他类似Expect的Python模块 要求TCL和Expect或要求编译C扩展。 Pexpect没有 使用C,Expect或TCL扩展。它应该适用于任何支持的平台 标准的Python pty模块。 Pexpect界面侧重于易用性 简单的任务很简单。
直接从Pexpect网站上获取的使用示例
child = pexpect.spawn('scp foo myname@host.example.com:.')
child.expect ('Password:')
child.sendline (mypassword)
您可以将终端作为子进程生成,然后在GUI生成事件时使用此子进程发送命令。
答案 2 :(得分:0)
我创建了这个简单的tcl程序pgm.tcl
puts "Hello world"
我可以在控制台中启动它
tclsh pgm.tcl
以下是如何在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)
这个答案取决于操作系统(linux),但你应该能够适应其他操作系统。