项目方案:sh 执行python脚本时如何获取脚本执行参数
1. 引言
在实际的项目开发中,我们经常会遇到需要在shell脚本中执行Python脚本的情况。而在执行Python脚本时,我们可能需要传递一些参数给Python脚本,以便在脚本中进行相应的处理。本文将介绍如何在shell脚本中执行Python脚本时获取脚本的执行参数的方法,并给出相应的代码示例。
2. 获取脚本执行参数的方法
有多种方法可以在shell脚本中获取脚本的执行参数,下面将分别介绍这些方法,并给出相应的代码示例。
2.1 使用位置参数
shell脚本中,可以使用$0表示脚本本身,$1、$2、$3...表示脚本执行时传递的参数。在执行Python脚本时,可以将参数作为位置参数传递给脚本。
示例代码如下:
#!/bin/sh
python_script_path="path_to_python_script.py"
param1="value1"
param2="value2"
python $python_script_path $param1 $param2
在Python脚本中,可以通过sys.argv获取传递的参数。
示例代码如下:
import sys
param1 = sys.argv[1]
param2 = sys.argv[2]
print("param1:", param1)
print("param2:", param2)
2.2 使用命令行参数解析库
除了使用位置参数外,还可以使用一些命令行参数解析库来实现更加灵活的参数解析。常见的命令行参数解析库有argparse和click等。
2.2.1 使用argparse库
argparse是Python标准库中的一个命令行参数解析库,可以用来解析命令行参数,并生成相应的帮助文档。
示例代码如下:
import argparse
parser = argparse.ArgumentParser(description='Script description')
parser.add_argument('param1', help='Parameter 1')
parser.add_argument('param2', help='Parameter 2')
args = parser.parse_args()
print("param1:", args.param1)
print("param2:", args.param2)
在shell脚本中,可以通过以下方式调用Python脚本:
#!/bin/sh
python_script_path="path_to_python_script.py"
param1="value1"
param2="value2"
python $python_script_path $param1 $param2
2.2.2 使用click库
click是一个Python的第三方库,可以用来解析命令行参数,并生成相应的命令行界面。
示例代码如下:
import click
@click.command()
@click.argument('param1')
@click.argument('param2')
def main(param1, param2):
print("param1:", param1)
print("param2:", param2)
if __name__ == '__main__':
main()
在shell脚本中,可以通过以下方式调用Python脚本:
#!/bin/sh
python_script_path="path_to_python_script.py"
param1="value1"
param2="value2"
python $python_script_path $param1 $param2
2.3 使用环境变量
除了使用位置参数和命令行参数解析库外,还可以使用环境变量来传递参数给Python脚本。
在shell脚本中,可以通过以下方式设置环境变量:
#!/bin/sh
export PARAM1="value1"
export PARAM2="value2"
python_script_path="path_to_python_script.py"
python $python_script_path
在Python脚本中,可以通过以下方式获取环境变量:
import os
param1 = os.getenv("PARAM1")
param2 = os.getenv("PARAM2")
print("param1:", param1)
print("param2:", param2)
3. 项目甘特图
gantt
dateFormat YYYY-MM-DD
title 项目甘特图
section 项目阶段
需求调研:done, 2022-01-01, 2022-01-10
设计开发:done, 2022-01-11, 2022-01-20
测试:done, 2022-01-21