繁体   English   中英

Python 脚本在从 Jenkins 运行时出现语法错误

[英]Python script gives Syntax error while running it from Jenkins

我有一个 python 脚本来更新 Google 工作表。 当我在本地执行脚本并按预期更新 Google 工作表时,该脚本工作正常,我想每 3 小时自动执行一次。我们正在使用 Jenkins 进行作业调度,当我尝试从 jenkins 执行它时,它显示语法错误。

下面提到了错误和脚本。有关如何解决它的任何建议?

Started by user admin_123
Running as SYSTEM
[EnvInject] - Loading node environment variables.
Building in workspace /var/lib/jenkins/jobs/update_oos_gs/workspace
[workspace] $ /bin/sh -xe /tmp/jenkins6318169151390457385.sh
+ export PYTHONPATH=/home/etl/bi/
+ cd /home/etl/bi/crm
+ python3 -u oos_gs_update.py
  File "oos_gs_update.py", line 22
    r = f"{col_name}{header}:{col_name}{len(col)+header}"
                                                        ^
SyntaxError: invalid syntax
Build step 'Execute shell' marked build as failure
Finished: FAILURE

下面是我的 Python 脚本,

import os
import sys
import datetime
import psycopg2
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from time import sleep
from utils.config import Configuration as Config
from utils.postgres_helper import get_connection
from utils.utils import get_global_config

sys.path.append('/home/etl/bi/')

GSHEET_CONFIG_SECTION = 'gsheet'
SCOPE =  ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
SHEET_KEY='1Mq7_********y5WtB1R-ZKfz6o'

def update_sheet(sheet, table, columns="ABC", header=4):
    to_update = []
    table = list(zip(*table))
    for col_name, col in zip(columns, table):
        r = f"{col_name}{header}:{col_name}{len(col)+header}"
        cells = sheet.range(r)
        for cell, value in zip(cells, col):
            cell.value = value
        to_update.extend(cells)
    sheet.update_cells(to_update)


cnx_psql =get_connection(get_global_config(), 'pg_dwh')
print('DB connected')
psql_cursor = cnx_psql.cursor()

METADATA_QUERY = '''SELECT sku,product_name,CAST(oos as TEXT) as oos FROM staging.oos_details order by oos DESC;'''
psql_cursor.execute(METADATA_QUERY)
results = psql_cursor.fetchall()
cell_values = (results)

home_dir = os.path.expanduser('~')
config=get_global_config()
gsheet_config_section = GSHEET_CONFIG_SECTION
secret_file_path = os.path.join(home_dir,config.get(gsheet_config_section, 'service_account_credentials'))
creds = ServiceAccountCredentials.from_json_keyfile_name(secret_file_path, scopes=SCOPE)

client = gspread.authorize(creds)
sheet = client.open_by_key(SHEET_KEY).sheet1

#Function Call
update_sheet(sheet, cell_values)

psql_cursor.close()
cnx_psql.close()

Python 3.6 引入了PEP 498 中描述的 f'string{interpolation}' 格式。 鉴于 Jenkins 为您提供的关于代码中第 22 行的错误消息是关于较新的字符串格式,只需按如下方式更改该行即可。

r = f"{col_name}{header}:{col_name}{len(col)+header}"

r = "{}{}:{}{}".format(col_name, header, col_name, len(col) + header)

尝试这个:

r = col_name + str(header) + ':' + col_name + str(len(col)+header)

或者您也可以使用其他格式化方法或将python升级到最新版本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM