首页 > 其他分享 >命令行帮助信息、手动和交互执行

命令行帮助信息、手动和交互执行

时间:2024-07-10 10:58:14浏览次数:15  
标签:__ name -- 手动 命令行 path serial 交互 options

一、方式一

1、先定义一个命令行解析类

class CommandLineParser:
    def __init__(self):
        self.arguments = {}
        self.valid_options = {
            "help", "mode", "interval", "export", "wave_data_export", "wave_set",
            "ip", "serial_path", "rate", "devid", "url", "topic", "user", "passw",
        }

    def parse(self, args):
        current_name = ""
        values = []
        invalid_options = []

        for arg in args:
            if arg.startswith("--"):
                if current_name != "" and values:
                    self.arguments[current_name] = values
                    values = []
                current_name = arg[2:]
            elif arg.startswith("-"):
                if current_name != "" and values:
                    self.arguments[current_name] = values
                    values = []
                current_name = arg[1:]
            else:
                values.append(arg)

        if current_name != "":
            self.arguments[current_name] = values

        for key in self.arguments.keys():
            if key not in self.valid_options:
                invalid_options.append(key)

        if invalid_options:
            raise ValueError(f"Invalid option(s): {' '.join(invalid_options)}")

    def contains(self, name):
        return name in self.arguments

    def get_help_message(self):
        script_name = sys.argv[0]
        return f"""
            Usage: python {script_name} [options]

            Options:
              --help                Show this help message and exit
              --mode                Choose connection mode (1 for MIB RS232, 2 for LAN)
              --interval            Data Transmission interval (1-5)
              --export              Data export option (1-4)
              --wave_set            Waveform data export priority option (0-12)
              --wave_data_export    Choose Waveform data export scale option (1-2)
              --ip                  Target IP address for LAN 
              --serial_path         Target Serial port path for MIB
              --rate                Serial baudrate for MIB
              --devid               Device ID/Name for export
              --url                 Data export URL (JSON or MQTT WebSocket)
              --topic               MQTT Topic
              --user                MQTT Username
              --passw               MQTT Password

            Examples:
            python {script_name} --mode 1 --interval 1 --export 1 --wave_set 0 --wave_data_export 1 --serial_path /dev/ttyS5 --rate 115200
            python {script_name} --mode 2 --interval 1 --export 1 --wave_set 0 --wave_data_export 1 --ip localhost
            """

2、定义一个获取交互的函数,命令参数没有就从交互中取

def get_input(parser, key, options=None, prompt="", default=None):
    if options is None:
        options = []
    if parser.arguments.get(key):
        return parser.arguments[key][0]
    else:
        if default is not None:
            return default
        if options:
            for option in options:
                print(option)
        return input(prompt)

3、使用get_input取值

ip_address_remote = get_input(parser, 'ip', prompt="Enter the target IP address of the monitor assigned by DHCP: ",
                                  default="localhost") 

4、程序入口

def main(args):
    parser = CommandLineParser()
    try:
        parser.parse(args)
        if parser.contains('help'):
            print(parser.get_help_message())
            return
    except ValueError as e:
        print(e)
        print(parser.get_help_message())
        return

    ser_connect_set = get_input(parser, 'mode', ["1. Connect via MIB RS232 port", "2. Connect via LAN port"],
                                "Choose connection mode (1-2): ", default='2')

    if ser_connect_set == "1":
        connect_via_MIB(args)
    elif ser_connect_set == "2":
        connect_via_lan(args)
    else:
        print("Invalid mode selected!")


if __name__ == '__main__':
    main(sys.argv[1:]) 

二、方式二(getopt)

1、定义一个解析函数

def print_help():
    print("python {} ".format(__file__))
    print("python {} --serial-path=/dev/ttyS0 --serial-rate=115200"
          .format(__file__))
    print("python {} --serial-path=COM3 --serial-rate=115200"
          .format(__file__))


def parse_args(argv):
    try:
        options, args = getopt.getopt(argv, "h", ["help", "serial-path=", "serial-rate="])
    except getopt.GetoptError:
        sys.exit()
    serial_path, serial_rate = "/dev/ttyS0", 115200
    for option, value in options:  # [('--serial-path', 'COM5')]
        if option in ("-h", "--help"):
            print_help()
            sys.exit()
        if option in "--serial-path":
            serial_path = value
        if option in "--serial-rate":
            serial_rate = int(value)
    return serial_path, serial_rate

2、程序入库

if __name__ == '__main__':
    serial_path, serial_rate = parse_args(sys.argv[1:])
    if not check_serial_port(serial_path):
        sys.exit(-1)
    simulator = PhilipsMpMPMonitorSimulator(serial_path, serial_rate)
    signal.signal(signal.SIGINT, signal_handler)

  

 

三、shell版本的getopt

 

标签:__,name,--,手动,命令行,path,serial,交互,options
From: https://www.cnblogs.com/dgp-zjz/p/18293200

相关文章

  • Windows 10如何手动更新设备驱动
        在数字化的今天,计算机硬件的性能与稳定性直接关系到我们的工作效率和生活质量。Windows10作为全球广泛使用的操作系统,其设备驱动的健康状况对整个系统的表现起着决定性作用。无论是为了优化硬件性能,解决设备兼容性问题,还是提升安全防护,定期更新设备驱动已成为每位......
  • python web框架如何处理与数据库的交互
    pythonweb框架如何处理与数据库的交互1.ORM在python中通过关系映射(orm),调用底层dbapi来实现数据库的操作。通过定义类和对象,(类是表,类的对象是数据库的一行数据。)来操作数据库,通过底层的转换,最终形成sql,在相应的数据库中执行。对象关系映射(英语:ObjectRelationMapping,简称O......
  • Shell处理JSON命令行-jq
    jq是一个命令行工具,专门用来处理和转换JSON数据。官网:https://github.com/jqlang/jq安装aptinstalljq基本用法JSON示例文件file.json[{"name":"Alice","age":30},{"name":"Bob","age":35}]#格式化输出jq'.'......
  • 腾讯云篇7、手动搭建 WordPress 个人站点(Linux)
    操作场景WordPress是一款使用PHP语言开发的博客平台,您可使用通过WordPress搭建属于个人的博客平台。本文以CentOS7.6操作系统的腾讯云云服务器为例,手动搭建WordPress个人站点。示例软件版本本文搭建的WordPress个人站点组成版本及说明如下:Linux:Linux操作系统,......
  • 简易Git命令行入门
    简易的Git命令行入门教程:1.Git全局设置:gitconfig--globaluser.name"demo"gitconfig--globaluser.email"[email protected]"2.创建git仓库:mkdirdemo1cddemo1gitinittouchREADME.mdgitaddREADME.mdgitcommit-m"firstcommit"git......
  • 命令行开发工具
    GNU工具集在上个世纪八十年代,计算机都是奢侈品,操作系统里最著名的是Unix家族,当时还没有Windows、Linux之类的,Unix系统都是商业软件,里面的应用软件也是商业软件,全是封闭的环境。系统程序员RichardM.Stallman(RMS)在此环境下创立了与众不同的GNU项目(GNU'sNotUni......
  • 推出支持第五代CAPSENSE™技术的PSoC™ 车规级4100S Max系列(CY8C4147AZS、CY8C4148AZA
    全新的PSoC™4100SMax系列产品带有扩展的闪存器件与通用输入/输出接口(GPIO),支持第五代CAPSENSE™电容和电感式触摸感应技术,能够满足新一代人机交互(HMI)应用的需求。PSoC4100SMax采用CAPSENSE™技术,拥有7x7mm²、10x10mm²和14x14mm²三种封装尺寸,是工业控制、汽车人机交互(HMI......
  • vbc.exe 是 Microsoft Visual Basic 编译器的命令行工具。它用于编译 Visual Basic (.
    vbc.exe是MicrosoftVisualBasic编译器的命令行工具。它用于编译VisualBasic(.NET)的源代码文件(.vb文件)到可执行文件或者库文件(例如.exe或.dll)。vbc.exe提供了一种方式来将VisualBasic源代码编译成在.NETFramework或.NETCore平台上可执行的程序。......
  • csc.exe 是 Microsoft Visual C# 编译器的命令行工具。它用于编译 C# 源代码文件 (.cs
    csc.exe是MicrosoftVisualC#编译器的命令行工具。它用于编译C#源代码文件(.cs文件)到可执行文件或者库文件(例如.exe或.dll)。具体来说,csc.exe是用来将C#源代码编译成.NETFramework或.NETCore平台上的可执行文件或者库的工具。以下是一些常见用途和特点:......
  • 命令行版的ChatGPT(修改版)
    本帖最后由CrLf于2023-7-2900:17编辑命令行下调用OpenAI接口,从标准输入中读取用户输入并将其发送到GPT模型,再将响应写入标准输出。因原版默认是UTF8,所以我改成默认以GBK编码读取输入,并增加--utf8开关兼容utf8编码。原版GitHub:https://github.com/pdfinn/sgpt用法:sg......