小编Jos*_*son的帖子

Argparse:子解析器的选项覆盖 main 如果两者共享父

我将 argparse 与几个子解析器一起使用。我希望我的程序在 args 中的任何地方都采用详细程度的选项,包括子解析器。

from argparse import ArgumentParser
p = ArgumentParser()
p.add_argument('--verbose', '-v', action='count')

sub = p.add_subparsers()
a = sub.add_parser('a')

print(p.parse_args())
Run Code Online (Sandbox Code Playgroud)

默认情况下,如果用于子解析器,主解析器的选项将抛出错误:

$ python tmp.py -v a
Namespace(verbose=1)

$ python tmp.py a -v
usage: tmp.py [-h] [--verbose] {a} ...
tmp.py: error: unrecognized arguments: -v
Run Code Online (Sandbox Code Playgroud)

我从这个答案中查看了父解析器。

from argparse import ArgumentParser

parent = ArgumentParser(add_help=False)
parent.add_argument('--verbose', '-v', action='count')

main = ArgumentParser(parents=[parent])

sub = main.add_subparsers()
a = sub.add_parser('a', parents=[parent])

print(main.parse_args())
Run Code Online (Sandbox Code Playgroud)

但是由于某种原因,没有一个共享标志在主解析器上工作。

$ python tmp2.py a -vvv
Namespace(verbose=3)
$ python tmp2.py -vvv …
Run Code Online (Sandbox Code Playgroud)

python argparse python-3.x

5
推荐指数
1
解决办法
661
查看次数

没有定义的结构意味着什么?

最近,我在系统中遇到了以下代码stdio.h

struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
Run Code Online (Sandbox Code Playgroud)

我曾经看到过这样的指针,这些指针是这样向前声明的:extern struct _IO_FILE *stdin;,但是拥有裸露的结构似乎很奇怪,因为您无法使用该结构或将其传递给函数。这只是一个禁忌症吗?

c struct forward-declaration

5
推荐指数
1
解决办法
61
查看次数

为什么clang-tidy说vsnprintf有未初始化的va_list参数?

在以下函数中,我进行初始化args,在调用中使用它们va_start,然后调用va_end

该代码对我来说似乎正确,但是clang-tidy发出警告:

tmp2.c:7:11: error: Function 'vsnprintf' is called with an uninitialized va_list argument [clang-analyzer-valist.Uninitialized,-warnings-as-errors] len = vsnprintf((void*)0, 0, format, args);

#include<stdarg.h>
#include<stdio.h>
int f(char *format, ...) {
    int len;
    va_list args;
    va_start(args, format);
    len = vsnprintf((void*)0, 0, format, args);
    va_end(args);
    return len;
}
Run Code Online (Sandbox Code Playgroud)

更奇怪的是,这只会在我一次清理多个文件时发生,因此clang-tidy tmp2.c不会发出警告,但是clang-tidy tmp2.c tmp2.c会发出警告!

这是我的代码还是clang-tidy的问题?我使用的是LLVM 7.0.0版,但8.0.0也会出现该警告。

c variadic-functions clang-tidy

5
推荐指数
1
解决办法
56
查看次数