如何编写Linux Shell脚本传递monitor_id并添加输出参数
实现方案
1. 先修改Python脚本支持命令行参数
原脚本通过交互式输入获取monitor_id,我们改成用命令行参数接收ID和输出路径,这样Shell脚本可以直接传参。修改后的代码如下:
""" Fetch Datadog monitor details via command line """ from datadog_api_client import ApiClient, Configuration from datadog_api_client.v1.api.monitors_api import MonitorsApi import argparse import sys def main(): # 解析命令行参数 parser = argparse.ArgumentParser(description="Get Datadog monitor details") parser.add_argument("monitor_id", type=int, help="Target Datadog monitor ID") parser.add_argument("-o", "--output", help="Optional output file path (defaults to stdout)") args = parser.parse_args() # 调用Datadog API configuration = Configuration() with ApiClient(configuration) as api_client: api_instance = MonitorsApi(api_client) try: response = api_instance.get_monitor(monitor_id=args.monitor_id) # 整理输出内容 result = f"Type: {response['type']}\nName: {response['name']}\nState: {response['overall_state']}\n" # 根据参数决定输出到文件还是终端 if args.output: with open(args.output, 'w') as out_file: out_file.write(result) else: print(result) except Exception as err: print(f"Error: {str(err)}", file=sys.stderr) sys.exit(1) if __name__ == "__main__": main()
2. 编写Shell脚本
创建一个fetch_monitor.sh脚本,负责接收参数并调用修改后的Python脚本:
#!/bin/bash # 检查是否传入了必要的monitor_id参数 if [ $# -lt 1 ]; then echo "Usage: $0 <monitor_id> [-o <output_file>]" exit 1 fi # 调用Python脚本,传递所有接收到的参数 python3 /absolute/path/to/your/python_script.py "$@"
脚本使用说明
- 给Shell脚本添加执行权限:
chmod +x fetch_monitor.sh
- 基础用法(输出到终端):
./fetch_monitor.sh 12345
- 输出到文件:
./fetch_monitor.sh 12345 -o monitor_info.txt
关键说明
- Python脚本用
argparse处理命令行参数,支持必选的monitor_id和可选的-o输出参数 - Shell脚本通过
"$@"将所有输入参数原封不动传递给Python脚本,确保参数传递准确 - Shell脚本先做参数校验,避免用户遗漏必要的monitor_id
内容的提问来源于stack exchange,提问作者Rocco_new97
相关产品推荐
相关产品推荐

