本地正常的Python2.7脚本在Jenkins中执行出现语法错误
解决Jenkins中Python脚本调用时的语法错误问题
这个问题的根源很明确:你用到的字典推导式语法是Python 2.7才正式引入的,但Jenkins环境里默认的python命令指向的是更低版本的Python(比如Python 2.6),所以才会在执行b.py时抛出语法错误,而你本地SCP环境用的是Python 2.7,自然能正常运行。
下面给你几个可行的解决办法:
1. 明确指定Python 2.7路径调用脚本
首先确认Jenkins服务器上Python 2.7的绝对路径:在Jenkins的构建步骤里先执行which python2.7,会得到类似/usr/bin/python2.7的路径。
然后修改a.py里的调用代码,把原来的python替换成这个绝对路径:
os.popen("/usr/bin/python2.7 " + dir + "/../bin/b.py -i " + dependfile).read()
如果Jenkins环境里直接能调用python2.7命令(比如PATH里已经包含),也可以直接写成python2.7代替python,不用绝对路径。
2. 修正Jenkins的环境变量配置
- 先在Jenkins构建脚本的开头添加一行命令,检查当前默认Python版本:
这能帮你确认是不是默认python --version && python2.7 --versionpython指向了旧版本。 - 如果需要,可以在Jenkins的全局工具配置里添加Python 2.7的安装路径,然后在构建任务里指定使用这个Python版本;或者在构建脚本开头修改PATH环境变量,把Python2.7的目录放到最前面:
export PATH=/usr/bin/python2.7所在的目录:$PATH
3. 兼容旧Python版本的代码修改(备选)
如果暂时没法调整Jenkins的Python版本,也可以修改b.py里的字典推导式,改成兼容Python 2.6及以上的写法:
# 把原来的字典推导式替换成这个 color = dict((u, "yellow") for u in G)
这种写法在低版本Python里也能正常运行,功能和原来的推导式完全一致。
内容的提问来源于stack exchange,提问作者sabarish s
相关产品推荐
相关产品推荐

