五 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(重点)

    argparseoptparse 的升级版,使用更加简便,功能也更强大。它支持更灵活的参数解析,例如:

    • 短选项和长选项可以同时定义。
    • 参数类型可以设置为 intstrfloat 等。
    • 支持 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 脚本如何处理命令行参数的全面解释。如果你有具体的需求或问题,可以进一步优化和调整这些方法。

    上一篇:六 python模块化编程
    下一篇:四 python异常处理

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年04月14日 13时32分03秒