修复 CheckMK 插件中的 Python3 语法错误

Fix Python3 syntax error in CheckMK plugin

提问人:rabudde 提问时间:10/20/2023 更新时间:10/20/2023 访问量:30

问:

我正在使用 CheckMK 2.2.0 及其 Nginx 插件来监控某些主机。代理在使用 Python 3.4.2 的主机上运行,无法更新。在此主机上运行 Nginx 插件时,出现语法错误:

# python3 nginx_status.py
  File "nginx_status.py", line 126
    config: dict = {}
          ^
SyntaxError: invalid syntax

代码如下所示:

def main():  # pylint: disable=too-many-branches
    config_dir = os.getenv("MK_CONFDIR", "/etc/check_mk")
    config_file = config_dir + "/nginx_status.cfg"

    config: dict = {}
    if os.path.exists(config_file):
        with open(config_file) as open_config_file:
            config_src = open_config_file.read()
            exec(config_src, globals(), config)

使用 Python 3.11.2 在另一台主机上运行此脚本可以正常工作。但正如我所说,我无法更新较旧的 Python 版本。我是一名PHP程序员,但对Python一无所知。

这种类型的代码是什么以及如何修复它以在 Python 3.4 上运行?config: dict = {}

python-3.x 语法错误 python-3.4

评论

1赞 Swifty 10/20/2023
但要回答您的问题,只需删除 ': dict' 并保留config = {}

答:

1赞 tripleee 10/20/2023 #1

Python 3.4 太旧了,不支持类型注释。您确实应该将其升级到安全且受支持的版本。3.4 已于 2019-03-18 终止使用。

在此期间,解决方法是从源代码中删除任何类型注释。任何看起来像或应该失去部分的东西。同样,带有注释的函数定义也应该丢失它。variable: type = valuevariable: type: type-> returntype

例如

def foo(bar: int, baz: str = "") -> bool:
   temp: str = f"{bar}!={baz}"
   return temp == "1!=2"

应重构为

def foo(bar, baz=""):
   temp = f"{bar}!={baz}"
   return temp == "1!=2"

用于向后兼容。

评论

0赞 rabudde 10/20/2023
多谢。我知道PHP的类型提示。现在解决了这个问题,我知道这些系统必须尽快升级或更换。