【问题标题】:Invoke method of python class from groovy script从groovy脚本调用python类的方法
【发布时间】:2020-06-30 23:23:00
【问题描述】:

我想从 groovy 脚本中执行我的 python 类的方法。 该方法有两个参数。

当我从终端执行此命令时: python -c '导入我的类; Myclass.method("param1","param2")' 它正在工作。

我使用这个 groovy 脚本代码:

def cmd = "cd /path/to/the/folder && python -c 'import Myclass; Myclass.method(param1,param2)'"
def proc = ["/bin/sh", "-c", cmd].execute()
proc.waitFor()
println "return code: ${proc.exitValue()}"
println "stderr: ${proc.err.text}"
println "stdout: ${proc.in.text}"

当我想在 groovy 脚本中执行相同操作时,我的参数出错:NameError: name 'param1' is not defined。

你知道为什么吗?

最好的问候

【问题讨论】:

    标签: python bash groovy


    【解决方案1】:

    当您在终端中执行脚本时,您使用了字符串文字"param1", "param2",而不是未定义的变量param1, param2。由于您已经使用了单引号和双引号,因此您应该使用反斜杠转义双引号:

    def cmd = "cd /path && python -c 'import Myclass; Myclass.method(\"param1\", \"param2\")'"
    

    或者,只使用三引号:

    def cmd = '''cd /path && python -c 'import Myclass; Myclass.method("param1", "param2")' '''
    

    【讨论】:

    • 我在 groovy 脚本中有这段代码: script = ''' def val1 = 'val1' def val2 = 'val2' def cmd = """ cd /path/to/my/folder && python -c 'import MyClass; MyClass.my_method(\"${param1}\",\"${param2}\")' """ some code ''';我想在脚本之外使用参数: def val1 = 'val1' def val2 = 'val2' script = ''' def cmd = """ cd /path/to/my/folder && python -c 'import MyClass; MyClass .my_method(\"${param1}\",\"${param2}\")' """ 一些代码 ''';我尝试结合简单和双三引号,但它不起作用,你知道我该如何解决这个问题吗?
    • @DavidBellerose 那么什么是 param1?您只定义了 val1 或 val2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多