提问人:rabudde 提问时间:10/20/2023 更新时间:10/20/2023 访问量:30
修复 CheckMK 插件中的 Python3 语法错误
Fix Python3 syntax error in CheckMK plugin
问:
我正在使用 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 = {}
答:
1赞
tripleee
10/20/2023
#1
Python 3.4 太旧了,不支持类型注释。您确实应该将其升级到安全且受支持的版本。3.4 已于 2019-03-18 终止使用。
在此期间,解决方法是从源代码中删除任何类型注释。任何看起来像或应该失去部分的东西。同样,带有注释的函数定义也应该丢失它。variable: type = value
variable: 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的类型提示。现在解决了这个问题,我知道这些系统必须尽快升级或更换。
评论
config = {}