Argparse 可选标准输入读取 and/or 标准输出输出
Argparse optional stdin read and/or stdout out
非Python程序将调用带有输入和输出参数的Python程序。输入可以是文件引用或重定向到非 Python 程序中的标准输入的字符串。输出可能是文件或标准输出。
argparse.FileType
似乎已经准备好处理这个问题,因为它已经有特殊的 -
可以指向 stdin/stdout。事实上,使用 -
指向 stdout 是可行的,但是我不知道 stdin 的 implementation/syntax 是什么。
非Python代码中的示例调用:
python mycode.py - output.txt
python mycode.py - -
非Python代码在那之后做了什么? Print/stdout 输入字符串?
Python 代码之后做什么?
我总是需要区分两个参数的去向(即输入和输出),因此在 add_argument
中使用 default="-"
或 default=sys.stdin
都行不通,因为它们需要缺席参数。
这是我目前的情况:
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)
我无法理解你的问题。我明白 Python 和 argparse
在做什么,但我不太明白你在做什么。
当从 Linux shell 调用时,您的示例看起来 运行 没问题。使用 -
参数,它应该接受来自键盘的输入,并将其显示在屏幕上。但是这些参数最常与 shell 重定向控件 >, <, |
一起使用(细节因 shell、sh
、bash
等而异)。
但是如果您使用 shell 重定向 stdin
或 stdout
to/from 文件,您也可以将这些文件作为命令行参数。
如果您被 required/default 问题困扰,请考虑标记这些参数(也称为 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
全部写入屏幕(标准输出)。可以用类似的方式重定向。
接受输入:
python mycode.py
{...}
^D
非Python程序将调用带有输入和输出参数的Python程序。输入可以是文件引用或重定向到非 Python 程序中的标准输入的字符串。输出可能是文件或标准输出。
argparse.FileType
似乎已经准备好处理这个问题,因为它已经有特殊的 -
可以指向 stdin/stdout。事实上,使用 -
指向 stdout 是可行的,但是我不知道 stdin 的 implementation/syntax 是什么。
非Python代码中的示例调用:
python mycode.py - output.txt
python mycode.py - -
非Python代码在那之后做了什么? Print/stdout 输入字符串?
Python 代码之后做什么?
我总是需要区分两个参数的去向(即输入和输出),因此在 add_argument
中使用 default="-"
或 default=sys.stdin
都行不通,因为它们需要缺席参数。
这是我目前的情况:
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)
我无法理解你的问题。我明白 Python 和 argparse
在做什么,但我不太明白你在做什么。
当从 Linux shell 调用时,您的示例看起来 运行 没问题。使用 -
参数,它应该接受来自键盘的输入,并将其显示在屏幕上。但是这些参数最常与 shell 重定向控件 >, <, |
一起使用(细节因 shell、sh
、bash
等而异)。
但是如果您使用 shell 重定向 stdin
或 stdout
to/from 文件,您也可以将这些文件作为命令行参数。
如果您被 required/default 问题困扰,请考虑标记这些参数(也称为 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
全部写入屏幕(标准输出)。可以用类似的方式重定向。
接受输入:
python mycode.py
{...}
^D