核心概念
- 命令行参数:程序启动时跟在命令后的字符串(如
./app --input=file.txt
) - 作用:传递文件名、配置选项、运行模式等
- 安全提示:始终验证参数合法性,防止注入攻击
各语言获取方法
Python
import sys if __name__ == "__main__": # sys.argv[0] 是脚本名,后续为参数 args = sys.argv[1:] # 跳过脚本名 print("参数列表:", args) # 进阶解析(推荐) import argparse parser = argparse.ArgumentParser() parser.add_argument("--input", help="输入文件路径") parsed = parser.parse_args() print("输入文件:", parsed.input)
Java
public class Main { public static void main(String[] args) { // args 直接包含参数(不含类名) for (int i = 0; i < args.length; i++) { System.out.println("参数" + i + ": " + args[i]); } // 使用Apache Commons CLI库解析复杂参数 // 参考:https://commons.apache.org/proper/commons-cli/ } }
C/C++
#include <stdio.h> int main(int argc, char *argv[]) { /* argc: 参数数量(含程序名) argv[0]: 程序名 argv[1...]: 真实参数 */ for (int i = 1; i < argc; i++) { printf("参数 %d: %sn", i, argv[i]); } return 0; }
JavaScript (Node.js)
// 基础方法 const args = process.argv.slice(2); // 前两项是node路径和脚本路径 console.log("参数:", args); // 推荐使用yargs库解析 const yargs = require('yargs'); const argv = yargs(process.argv).argv; console.log("输入:", argv.input);
C#
using System; class Program { static void Main(string[] args) { // args 数组直接存储参数 foreach (var arg in args) { Console.WriteLine($"参数: {arg}"); } // 使用System.CommandLine库处理复杂场景 // 文档:https://learn.microsoft.com/en-us/dotnet/standard/commandline/ } }
Go
package main import ( "fmt" "os" ) func main() { // os.Args[0]是程序名,后续为参数 args := os.Args[1:] for i, arg := range args { fmt.Printf("参数%d: %sn", i, arg) } }
参数解析最佳实践
- 验证必填参数
if not parsed.input: print("错误:必须指定 --input 参数") sys.exit(1)
- 类型转换
将字符串参数转为数字/布尔值等 - 设置默认值
// Java示例(使用库) Option input = new Option("i", "input", true, "输入文件"); input.setRequired(false); input.setDefaultValue("default.txt");
- 支持帮助文档
使用argparse
或System.CommandLine
自动生成--help
安全注意事项
- 边界检查:防止数组越界(如C/C++中检查
argc > 1
) - 注入防御:禁止直接拼接参数到系统命令(如
rm -rf $user_input
) - 敏感数据:避免通过命令行传递密码(可使用环境变量)
引用说明:本文代码示例基于各语言官方文档,解析库参考 Python argparse、Node.js yargs、.NET System.CommandLine,安全建议依据OWASP命令行安全规范。
通过正确解析命令行参数,可大幅提升程序灵活性和用户体验,建议优先使用标准库或成熟第三方解析工具,确保健壮性和安全性。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/14600.html