5

以下のコードを使用すると、Proc.tcl ファイル内のすべてのプロシージャを呼び出すことができますが、sum や sub などの proc を個別に呼び出したいので、それを呼び出す他の可能性を教えてください。

私のprocファイルプログラム、

 puts "hello"
    proc sum {a b} {

     set c [expr $a + $b]
     puts "Addition: $c "
    }




  proc sub {a b} {

     set c [expr $a - $b]
     puts "Substraction: $c "
    }

私のメインファイルプログラム、

 import Tkinter
    import os
    r=Tkinter.Tk()
    r.tk.eval('source proc.tcl')
4

7 に答える 7

7

そのまま続けてください:

>>> import Tkinter
>>> r = Tkinter.Tk()
>>> r.tk.eval('proc sum {a b} {set c [expr {$a + $b}]; puts "Sum $c"; return $c}')
''
>>> r.tk.eval('sum 2 5')
Sum 7
'7'

したがって、あなたの場合、tcl ファイルを入手したら、r.tk.eval("sum 5 5")そのプロシージャを呼び出すことができます。

注: tcl では常に expr 式を括弧で囲みます。上記の私の例のように。

于 2013-05-08T12:23:01.803 に答える
1

Tkinter の機能が必要ない場合は、proc.tclを少し再構築してprocviaを呼び出すことができsubprocessます。

proc.tcl:

proc sum {a b} {
    set c [expr $a + $b]
    puts "Addition: $c "
}

proc sub {a b} {
    set c [expr $a - $b]
    puts "Substraction: $c "
}

eval $argv; # NOTE 1

caller.py:

import subprocess
import shlex

def tcl(command):
    command_line = shlex.split(command)
    output = subprocess.check_output(command_line)
    return output

print tcl('tclsh proc.tcl sum 5 8')
print tcl('tclsh proc.tcl sub 19 8')

caller.py の出力:

追加: 13

減算: 11

討論

  • 注 1: Tcl スクリプトでは、行eval $argvはコマンド ラインの内容を取得して実行します。エラーチェックをまったく提供しないため、潜在的に危険です。コマンドラインを実行する前に、悪意がないかどうかを確認する必要があります。ここにあるものは、デモンストレーション目的に適しています。

  • caller.pyの関数tclは、コマンド ラインを取得して分割し、proc.tcl を呼び出して作業を行います。出力を収集し、呼び出し元に返します。繰り返しますが、デモンストレーションの目的で、エラー チェックはまったく含めませんでした。

于 2013-05-08T20:14:12.813 に答える
-3

r.tk.eval('source proc.tcl') の代わりに

os.system ('source proc.tcl') を試して、OS をインポートしてください。

于 2013-05-21T06:50:45.570 に答える