Argparse可选参数覆盖位置

时间:2017-09-12 01:54:30

标签: python argparse

我试图找出让argparse位置参数与可选参数互斥的方法。

例如:

./adder 20 32
Output: 52
./adder --interactive
adder>

现在,如果我只是尝试“交互式”,它会告诉我我缺少位置参数。

示例代码:

parser = argparse.ArgumentParser()
parser.add_argument('a', metavar='First')
parser.add_argument('b', metavar='Second')
parser.add_argument('--interactive')
parser.parse_args()

我想知道是否有一种优雅的方式来做到这一点(最好使用argparse功能),以便“交互式”#39;禁用使用两个位置参数的要求。

1 个答案:

答案 0 :(得分:0)

通常不能省略位置参数。您可以尝试#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "i2c.h" #define SERVO_MIN 1000 #define SERVO_MAX 2000 #define SERVO_MID 1500 #define PCA9685_ADDR 0x4 #define PCA9685_MODE1 0x0 #define LED0_ON_L 0x6 #define LED0_ON_H 0x7 #define LED0_OFF_L 0x8 #define LED0_OFF_H 0x9 int main(void) { initI2C(); setupController(); for(int i = 1; i < 17; i++) { setServo(i, 0, 4026); } return 0; } void setupController() { i2cStart(); i2cSend(PCA9685_ADDR); i2cSend(PCA9685_MODE1); i2cSend(0x0); i2cStop(); } void setServo(uint8_t id, uint16_t start, uint16_t stop) { i2cStart(); i2cSend(PCA9685_ADDR); i2cSend(LED0_ON_L+4*id); i2cSend(start); i2cSend(start>>8); i2cSend(stop); i2cSend(stop>>8); i2cStop(); } 作为替代方案。

nargs='*'

使用list parser = argparse.ArgumentParser() parser.add_argument('ab', nargs='*', type='int') parser.add_argument('--interactive', action='store_true') args = parser.parse_args() 存储位置参数。如果省略,则args.ab将为空列表。