首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么即使通过shell脚本传递参数,ArgumentParser对象也不提供任何值

为什么即使通过shell脚本传递参数,ArgumentParser对象也不提供任何值
EN

Stack Overflow用户
提问于 2022-11-21 18:30:48
回答 1查看 35关注 0票数 0

我在shell脚本中调用python脚本,并将参数传递给这个python作业。参数将从配置文件中加载。在shell脚本中进行测试时,调用的变量将正确回显。在参数解析器中,HIVE_标记的参数都被标记为None。

Shell脚本

代码语言:javascript
复制
set -e

if \[ ! -z "$1" \]
then
config_file="$1"
else
config_file="./env.sh"
fi

${venv_path} ${mpw_path}/src/main_sample.py \
\--MPW_BASE "${mpw_base}" --MPW_PATH "${mpw_path}" \
\--FUNC "${trueup}" --TRUEUP_FILE "${trueup_file}"  \
\--TRUEUP_FILE_MANUAL "${trueup_file_manual}" --LATEST_TRUEUP_STAMP "${latest_trueup_stamp}" \
\--SQL_driver "${SQL_driver}" --SQL_server "$SQL_server" \
\--SQL_port "${SQL_port}" --SQL_db "${SQL_db}" \
\--LANDING_ZONE "${landing_zone}" --TIME_STAMP "${time_stamp}" \\ 
\--HIVE_driver "${HIVE_driver}" --HIVE_host "${HIVE_host}" \
\--HIVE_ZKNamespace "${HIVE_zknamespace}" --HIVE_ServiceDiscoveryMode "${HIVE_servicediscoverymode}" \
\--HIVE_AuthMech "${HIVE_authMech}" --HIVE_KrbServiceName "${HIVE_krbservicename}" \\ 
\--HIVE_KrbHostFQDN "${HIVE_krbhostfqdn}" --HIVE_SSP_tezqueue "${HIVE_ssp_tezqueue}"

配置文件

代码语言:javascript
复制
HIVE_driver=""
HIVE_host=""
HIVE_zknamespace=""
HIVE_servicediscoverymode=""
HIVE_authMech=""
HIVE_krbserviceame=""
HIVE_krbhostfqdn=""
HIVE_ssp_tezqueue=""

明显的推理缺少配置变量值。

Python脚本

代码语言:javascript
复制
parser = argparse.ArgumentParser(description='MPW Arg Parser')
    parser.add_argument('--MPW_BASE', help='base directory of project') 
    parser.add_argument('--MPW_PATH', help='directory of the repo') 
    parser.add_argument('--FUNC', help='function to done')
    parser.add_argument('--TRUEUP_FILE', help='mapping to be passed in writecustomertrueup') 
    parser.add_argument('--TRUEUP_FILE_MANUAL',  help='trueup exercise of previous week')
    parser.add_argument('--LATEST_TRUEUP_STAMP', help='trueup stamp') 
    parser.add_argument('--SQL_driver', help='SQL Driver') 
    parser.add_argument('--SQL_server', help='SQL Server') 
    parser.add_argument('--SQL_port', help='SQL Port') 
    parser.add_argument('--SQL_db', help='DATABASE to connect')
    parser.add_argument('--LANDING_ZONE', help='Landing zone of MPW')
    parser.add_argument('--TIME_STAMP', help="time stamp") 
    parser.add_argument('--HIVE_driver', help='EDL Driver') 
    parser.add_argument('--HIVE_host', help='EDL Host') 
    parser.add_argument('--HIVE_ZKNamespace', help='EDL ZKNamespace')
    parser.add_argument('--HIVE_ServiceDiscoveryMode', help='EDL Service Discovery Mode') 
    parser.add_argument('--HIVE_AuthMech', help='EDL Auth Mech') 
    parser.add_argument('--HIVE_KrbServiceName', help = 'KrbServiceName') 
    parser.add_argument('--HIVE_KrbHostFQDN', help = 'For EDL connection') 
    parser.add_argument('--HIVE_SSP_tezqueue', help = 'For EDL connection') 
    
    
    args, unknown = parser.parse_known_args()    
    
    if args.MPW_BASE is None or args.MPW_PATH is None or args.FUNC is None \
    or args.TRUEUP_FILE is None or args.TRUEUP_FILE_MANUAL is None \
    or args.LATEST_TRUEUP_STAMP is None or args.SQL_driver is None \
    or args.SQL_server is None or args.SQL_port is None or args.SQL_db \
    is None or args.LANDING_ZONE is None or args.TIME_STAMP is None \
    or args.HIVE_driver is None or args.HIVE_host is None or args.HIVE_ZKNamespace \
    is None or args.HIVE_ServiceDiscoveryMode is None or args.HIVE_AuthMech \
    is None or args.HIVE_KrbServiceName is None or args.HIVE_KrbHostFQDN is None \
    or args.HIVE_SSP_tezqueue is None:
    

      logging.error(str(args))
      logging.error(str(unknown)) 

args错误:

代码语言:javascript
复制
22/11/21 13:16:02 ERROR \<module\> Namespace(FUNC='TRUEUP', HIVE_AuthMech=None, HIVE_KrbHostFQDN=None, HIVE_KrbServiceName=None, HIVE_SSP_tezqueue=None, HIVE_ServiceDiscoveryMode=None, HIVE_ZKNamespace=None, HIVE_driver=None, HIVE_host=None

未知错误:

代码语言:javascript
复制
22/11/21 13:16:02 ERROR \<module\> \[' '\]

我试图更改config和shell脚本文件中的变量名,并期望它正确读取参数,但仍然没有为HIVE_命名的变量获得任何值。

EN

回答 1

Stack Overflow用户

发布于 2022-11-21 18:49:30

此代码不对配置文件执行任何操作,只需将其名称/路径存储在变量中。为了使用这些值,需要读取配置。

代码语言:javascript
复制
set -e

if [ ! -z "$1" ]
then
config_file="$1"
else
config_file="./env.sh"
fi

. "${config_file}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74523411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档