【问题标题】:calling python function with arguments using tcl script使用 tcl 脚本调用带有参数的 python 函数
【发布时间】:2021-04-29 16:01:24
【问题描述】:

我有一个带有 3 个参数的函数的 python 脚本 (sample.py)。其中第一个两个参数是十六进制,第三个是字符串。

def sampleFun(gen_lane,sw_state,test_name):`
    
    ### code segment 

    output = "some string"
    return output

我必须使用 tcl 脚本来调用 sample.py 中的这个函数 sampleFun。

如何做到这一点? 我试过这个 tcl 命令:

proc call_python { } {
    set gen_lane 0x10500000
    set sw_state 0x0000000B
    set test_case "linkup"
    set result [exec python -c "import sample; print sample.sampleFun($gen_lane,$sw_state,$test_case)"]
    puts $result

}

但我收到了未定义名称“linkup”的错误。

那么,如何将字符串参数从 tcl 传递给 python 函数?

【问题讨论】:

    标签: python python-3.x parameter-passing tcl


    【解决方案1】:

    您需要为 Python 引用它。

    对于这样一个几乎任意的值,你可以试试这个:

    set result [exec python -c "import sample; print sample.print_file($gen_lane,$sw_state,r'''$test_case''')"]
    

    这利用了这样一个事实:Python 中''' 引用的字符串可以包含换行符和单个' 字符,而r 字符串可以包含反斜杠。剩下的可能导致问题的案例很少。

    您知道您的示例 Python 代码是 sampleFun,但您的测试代码是 sample.print_file?我想你可以解决这个问题……

    【讨论】:

    • 真正通用的值传递需要完全不同的方法,因为任意 Tcl 字符串可能包含二进制数据,包括 NUL。这不是一个常见的问题……但一般情况下,您也必须处理那些尴尬的边缘情况。那时,您将通过临时文件、套接字或管道进行数据传输……这是很多更多的工作!
    • 嗨,Donal,如果我的 python 脚本 sample.py 在其他目录中,那么如何导入它?因为上面的 tcl proc 只有当我的 tcl 脚本和 python 脚本都在同一个文件夹中时才有效。
    • 我不知道。我总是运行安装在 virtualenv 中的所有 Python 代码,所以这个问题不会出现在我身上。我确信在 Stack Overflow 上会有一个已回答的问题,它描述了要设置的环境变量...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多