如何使用Python在同一个TCL shell上运行命令

时间:2016-03-03 09:52:47

标签: python tcl

我正在使用TCL编写所有库。我想在Python中创建一个GUI,它只有很少的按钮和其他选项。在开始TCL shell将打开。当我单击按钮时,将在TCL shell上执行相应的命令。

是否可以在不关闭TCL shell的情况下在TCL的同一shell上触发命令。

我搜索了谷歌并在Python中找到Tkniter模块,但每次我需要执行命令时它都会打开TCL shell。

3 个答案:

答案 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),但你应该能够适应其他操作系统。