
五 python的命令行参数
创建一个 使用
创建一个 使用 调用
发布日期:2021-05-07 23:01:31
浏览次数:23
分类:精选文章
本文共 3365 字,大约阅读时间需要 11 分钟。
如何处理Python脚本中的命令行参数
在编写Python脚本时,接收命令行参数是非常常见的操作。例如,运行脚本时可能会添加诸如dirsearch -u "xxxx.com" -e *
这样的参数。如果你想让脚本能够接受并处理这些参数,你需要选择合适的方式来解析命令行参数。以下是几种常用的方法,结合了我的理解和实践经验。
0x01 sys.argv
sys.argv
是 Python 提供的一个非常方便的工具,它以列表的形式返回运行 Python 程序时的所有命令行参数。需要注意的是,sys.argv[0]
通常指的是运行的 Python 程序本身,sys.argv[1]
表示第一个参数,依此类推。
例如,以下代码可以获取并输出传递给脚本的命令行参数:
import sysdef start(): print("程序本身:" + sys.argv[0]) print("第一个参数:" + sys.argv[1]) print("第二个参数:" + sys.argv[2]) print("第三个参数:" + sys.argv[3])if __name__ == '__main__': try: start() except KeyboardInterrupt: print("程序被中断,正在终止所有线程...")
0x02 getopt
getopt
是对 sys.argv
的进一步解析工具。它可以根据预定义的选项来处理命令行参数,例如 -u
可能表示用户参数,-p
可能表示密码参数。getopt.getopt()
返回两个列表:一个是选项值,另一个是非选项参数。
例如:
import sysimport getoptdef parse_args(): opts, args = getopt.getopt(sys.argv[1:], "u:h", ["help", "file="]) print("选项输出:" + str(opts)) print("非选项参数输出:" + str(args))if __name__ == '__main__': try: parse_args() except KeyboardInterrupt: print("程序被中断,正在终止所有线程...")
需要注意的是,getopt
的使用需要注意以下几点:
sys.argv[1:]
是为了避免处理程序本身作为参数。"u:h"
定义了两个短选项(-u 和 -h)。["help", "file="]
定义了两个长选项(--help 和 --file)。0x03 optparse
optparse
模块与 getopt
有些不同之处在于,它可以自动生成帮助信息,非常适合需要解析复杂命令行参数的场景。
optparse.OptionParser
的使用流程如下:
OptionParser
对象并添加选项。parse_args()
方法解析命令行参数。例如:
import optparsedef parse_options(): parser = optparse.OptionParser() parser.add_option("-u", "--user", dest="user", type="str", help="目标用户") parser.add_option("-s", "--sex", dest="sex", type="str", choices=["男", "女"], default="男", help="目标性别") parser.add_option("-n", "--number", dest="numbers", nargs=2, required=True, type="int", help="目标数字列表") options = parser.parse_args() print("用户:" + options.user) print("性别:" + options.sex) print("数字:" + str(options.numbers))if __name__ == '__main__': try: parse_options() except KeyboardInterrupt: print("程序被中断,正在终止所有线程...")
0x04 argparse(重点)
argparse
是 optparse
的升级版,使用更加简便,功能也更强大。它支持更灵活的参数解析,例如:
- 短选项和长选项可以同时定义。
- 参数类型可以设置为
int
、str
、float
等。 - 支持
nargs
参数,例如nargs=2
表示需要两个参数,nargs=*
表示零或多个参数。 - 支持
required
参数,强制某些参数必须存在。
argparse
的使用流程如下:
ArgumentParser
对象。add_argument()
方法添加选项和参数。parse_args()
方法解析命令行参数。例如:
import argparsedef main(): parser = argparse.ArgumentParser(description='处理某些整数') parser.add_argument('-u', '--user', dest='user', type=str, default='root', help='目标用户') parser.add_argument('-s', '--sex', dest='sex', type=str, choices=['男', '女'], default='男', help='目标性别') parser.add_argument('-n', '--number', dest='numbers', nargs=2, required=True, type=int, help='目标数字列表') args = parser.parse_args() print("用户:" + args.user) print("性别:" + args.sex) print("数字:" + str(args.numbers))if __name__ == '__main__': try: main() except KeyboardInterrupt: print("程序被中断,正在终止所有线程...")
实战:使用 argparse 写一个 ping 脚本
假设你想编写一个 ping 脚本,接收一个 URL 参数。以下是一个示例:
import argparseimport osdef ping_url(): parser = argparse.ArgumentParser(description='ping 一个 URL') parser.add_argument('-u', '--url', dest='url', nargs=1, type=str, required=True, help='要 ping 的 URL') args = parser.parse_args() url = args.url[0] cmd = f"ping {url}" os.system(cmd)if __name__ == '__main__': try: ping_url() except BaseException as e: print(f"错误:{e}")
以上是关于 Python 脚本如何处理命令行参数的全面解释。如果你有具体的需求或问题,可以进一步优化和调整这些方法。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月14日 13时32分03秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
解决mybatis嵌套查询使用PageHelper分页不准确
2019-03-05
Redis源码分析(七)--- zipmap压缩图
2021-05-08
大规模集群自动化部署工具--Chef的安装部署
2021-05-08
自定义Hive Sql Job分析工具
2021-05-08
【MySQL】(九)触发器
2021-05-08
关于Altium Designer 09导出BOM表不能正确分类问题
2019-03-05
Oracle 11G环境配置
2019-03-05
【Python】(十二)IO 文件处理
2019-03-05
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
2019-03-05
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
2019-03-05
Java8新特性——并行流与顺序流
2019-03-05
C语言的数值溢出问题(上)
2019-03-05
BottomNavigationView控件item多于3个时文字不显示
2019-03-05
函数指针的典型应用-计算函数的定积分(矩形法思想)
2019-03-05
8051单片机(STC89C52)八个LED灯闪烁
2019-03-05
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2019-03-05
用 wxPython 打印你的 App
2019-03-05
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2019-03-05
Linux下安装MySql过程
2019-03-05
原生vue实现VantUI中IndexBar索引导航栏功能
2019-03-05