我正在寻找一种方法来接受两个参数,argparse
这样
给定一个标志,它将切换dest
变量将从stdin
获取其值。
用例提供了我正在编写的cli工具,提供了两种提供数据的方式。
作为示例,在调用函数进行处理的最后namespace
时,这4个命令应该等效。
cat data.json | template-engine --template template.htm --json-stdin
template-engine --template template.htm --json-data data.json
template-engine --template <(cat template.htm) --json-data <(cat data.json)
cat template.htm | template-engine --json-data data.json
这个问题并不需要太多代码,因为从我在文档中阅读的内容来看,这似乎很困难,但是我认为使用action
类可以做到这一点,但是我不确定怎么样。
有什么想法吗?
请清楚一点,我想使用argparse
而不是任何其他命令行界面库来完成此操作。
我尝试使用一种操作,该操作将检查变量值的来源,但是如果我为其中一个参数指定默认值,则会导致问题。
在这里我想做的一些问题是:
argparse
工具执行此操作,还是应该实现逻辑后解析。 答案 0 :(得分:2)
使用连字符-
来指示标准输入要容易得多,就像大多数Unix工具一样。例如:
template-engine --template template.htm --json data.json
cat data.json | template-engine --template template.htm --json -
cat template.htm | template-engine --template - --json data.json
要处理连字符,可以使用fileinput.input(files=[filename])
代替手动操作。