Argparse,切换与stdin对应的参数

时间:2019-06-10 19:58:35

标签: python-3.x argparse

我正在寻找一种方法来接受两个参数,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工具执行此操作,还是应该实现逻辑后解析。

1 个答案:

答案 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])代替手动操作。