【问题标题】:How to pass variable to python from TCL and return python output to the same TCL script?如何将变量从 TCL 传递给 python 并将 python 输出返回到同一个 TCL 脚本?
【发布时间】:2021-08-26 07:34:05
【问题描述】:

我正在努力在 tcl 中运行 python 脚本。我想运行 tcl 脚本,以 tcl 变量作为参数调用 python 脚本,然后用 python 处理这些值并将它们传递给同一个 tcl 脚本进行下一步处理。

让我们假设它是 python 脚本:

import sys

def f(a,b):
    return "set lista {" + a + " "+ b +"}"
    
result = f(sys.argv[1],sys.argv[2])

print(result)

和tcl一:

set num1 10
set num2 20

set output [exec python "python.py" $num1 $num2]

eval $output

puts [lindex $lista 0]
puts [lindex $lista 1]

我使用了 eval 语句,它对于这么小的列表非常有效。事实上,我将有更长的列表或浮点值和字符串,我想将它们分开。现在这个解决方案,使用eval,不太方便。

我的问题是,是否有可能“更直接”地传递变量?例如,每个值作为单独的变量甚至拆分列表,一个浮点值和另一个字符串。

我知道有 tkinter 库,但我是初学者,我还在学习......老实说我不知道​​应该如何使用它:)

谁能帮忙?

您好!

【问题讨论】:

  • 是否必须处理返回值中的空格?
  • @Shawn 我不这么认为。数字对我来说是最重要的。

标签: python tcl


【解决方案1】:

跳过eval,使用

set lista [split [exec python python.py $num1 $num2]]

使用 python 脚本打印出空格分隔的值:

import sys

def f(a,b):
    return str(a) + " " + str(b)
    
result = f(sys.argv[1],sys.argv[2])

print(result)

只要您没有在值中嵌入空格,此方法就可以工作。

【讨论】:

  • 您也可以使用其他分隔符; | 是一个比较常见的。除此之外,实际上还有写出 CSV 数据或 JSON 数据,一旦复杂度上升,建议使用(因为双方都有调试的生成器和解析器),甚至使用 SQLite 数据库进行通信(这很棒 i> 当事情变得更复杂时)。
  • @Shawn 谢谢。事实上,eval 不是必需的。我也在考虑将 Python 结果导出到外部 *.txt 文件并将其读入 tcl。 @Donal Fellows 好点。它可能有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 2015-07-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多