命令行解析库 VLang

thi*_*ybk 6 vlang

我想用V 编程语言编写一个命令行应用程序。是否有用于命令行解析的库?

Ale*_*lby 6

是的,os 模块。此示例输出每个命令行参数

import os

fn main() {
    for arg in os.args {
        println(arg)
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的系统上运行时:program.exe hello!返回

D:\Documents\V\program.exe
hello!
Run Code Online (Sandbox Code Playgroud)

编辑:我现在看到了您使用命令行解析的目标。不,没有允许您执行此操作的现有模块。


Dan*_*lov 5

您可以使用官方flag模块。参见例如:https : //github.com/vlang/v/blob/689003454b5c60fa13a6a0b44c39f79847806609/tools/performance_compare.v#L204

从用户的角度来看,这会产生类似的结果:

0[13:29:12] /v/nv $ tools/performance_compare --help
performance_compare 0.0.4
-----------------------------------------------
Usage: performance_compare [options] COMMIT_BEFORE [COMMIT_AFTER]

Description:
  Compares V executable size and performance,
  between 2 commits from V's local git history.
  When only one commit is given, it is compared to master.

The arguments should be at least 1 and at most 2 in number.

Options:
  --help <bool>:false       Show this help screen

  --vcrepo <string>:https://github.com/vlang/vc
                            The url of the vc repository. You can clone it
                            beforehand, and then just give the local folder
                            path here. That will eliminate the network ops
                            done by this tool, which is useful, if you want
                            to script it/run it in a restrictive vps/docker.

  --verbose <bool>:false    Be more verbose

  --hyperfine_options <string>:
                            Additional options passed to hyperfine.
                            For example on linux, you may want to pass:
                               --hyperfine_options "--prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches'"

  --workdir <string>:/tmp   A writable folder, where the comparison will be done.

0[13:29:13] /v/nv $
Run Code Online (Sandbox Code Playgroud)


Ily*_*Zub 5

截至 2020 年 11 月,命令行参数解析包含在标准库中。

来自V存储库的示例

import cli { Command, Flag }
import os

fn main() {
    mut cmd := Command{
        name: 'cli'
        description: 'An example of the cli library.'
        version: '1.0.0'
    }
    mut greet_cmd := Command{
        name: 'greet'
        description: 'Prints greeting in different languages.'
        usage: '<name>'
        required_args: 1
        pre_execute: greet_pre_func
        execute: greet_func
        post_execute: greet_post_func
    }
    greet_cmd.add_flag(Flag{
        flag: .string
        required: true
        name: 'language'
        abbrev: 'l'
        description: 'Language of the message.'
    })
    greet_cmd.add_flag(Flag{
        flag: .int
        name: 'times'
        value: '3'
        description: 'Number of times the message gets printed.'
    })
    cmd.add_command(greet_cmd)
    cmd.parse(os.args)
}
Run Code Online (Sandbox Code Playgroud)

输出

$ v run ./examples/cli.v 
Usage: cli [flags] [commands]

An example of the cli library.

Flags:
  -help               Prints help information.
  -version            Prints version information.

Commands:
  greet               Prints greeting in different languages.
  help                Prints help information.
  version             Prints version information.
Run Code Online (Sandbox Code Playgroud)