Argparse可选stdin读取和/或stdout输出

时间:2015-10-15 22:48:39

标签: python stdout stdin argparse

非Python程序将使用输入和输出参数调用Python程序。输入可以是文件引用或在非Python程序中重定向到stdin的字符串。输出可以是文件或标准输出。

argparse.FileType似乎已准备好处理它,因为它已经有特殊的-来指向stdin / stdout。事实上,使用-指向stdout工作但是stdin的实现/语法是我不知道的。

示例调用非Python代码:
python mycode.py - output.txt
python mycode.py - -

之后非Python代码做了什么?打印/标准输入字符串?
之后Python代码做了什么?

我将始终需要区分两个args的位置(即输入和输出),因此在default="-"中使用default=sys.stdinadd_argument无法正常工作,因为它们需要缺席参数。

这是我到目前为止所拥有的:

parser = argparse.ArgumentParser()

parser.add_argument('read_fref', type=argparse.FileType('r'))
parser.add_argument('write_fref', type=argparse.FileType('w'))
parser_ns = parser.parse_args()

with parser_ns.read_fref as f_r:
    read_f = json.load(f_r)    

output = {'k': 'v'}

with parser_ns.write_fref as f_w:
    json.dump(output, f_w)

1 个答案:

答案 0 :(得分:3)

我无法理解你的要求。我理解Python和<app-element> <test-element></test-element> </app-element> 正在做什么,但我不太了解你想要做什么。

从Linux shell调用时,您的示例看起来运行正常。使用argparse参数,它应该接受来自键盘的输入,并将其显示在屏幕上。但这些参数最常用于shell重定向控件-(详细信息因shell,>, <, |sh等而异。)

但是如果您使用shell将bashstdin重定向到/从文件重定向,您也可以将这些文件作为命令行参数提供。

如果您对必需/默认问题感到困扰,请考虑将这些参数标记为标记(也称为stdout):

optionals

通过此更改,这些调用是相同的

parser.add_argument('-r','--readfile', type=argparse.FileType('r'), default='-')
parser.add_argument('-w','--writefile', type=argparse.FileType('w'), default='-')

全部写入屏幕(标准输出)。这可以用类似的方式重定向。

进行输入输入:

python mycode.py -r - <test.json
python mycode.py <test.json
python mycode.py -r test.json