我试图找出让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;禁用使用两个位置参数的要求。
答案 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
将为空列表。