重定向 stdin 和 stdin 的一致方法使用 optparse 将 stdout 输出到 python 中的文件
我有十几个程序可以通过标准输入或选项接受输入,并且我想以类似的方式为输出实现相同的功能。
optparse 代码如下所示:
parser.add_option('-f', '--file',
default='-',
help='Specifies the input file. The default is stdin.')
parser.add_option('-o', '--output',
default='-',
help='Specifies the output file. The default is stdout.')
其余的适用代码如下所示:
if opts.filename == '-':
infile = sys.stdin
else:
infile = open(opts.filename, "r")
if opts.output == '-':
outfile = sys.stdout
else:
outfile = open(opts.output, "w")
该代码运行良好,我喜欢它的简单性 - 但我无法找到对使用默认值“-”进行输出的任何人的引用指示标准输出。这是一个良好的一致解决方案还是我忽略了更好或更期望的东西?
I've got a dozen programs that can accept input via stdin or an option, and I'd like to implement the same features in a similar way for the output.
The optparse code looks like this:
parser.add_option('-f', '--file',
default='-',
help='Specifies the input file. The default is stdin.')
parser.add_option('-o', '--output',
default='-',
help='Specifies the output file. The default is stdout.')
The rest of the applicable code looks like this:
if opts.filename == '-':
infile = sys.stdin
else:
infile = open(opts.filename, "r")
if opts.output == '-':
outfile = sys.stdout
else:
outfile = open(opts.output, "w")
This code works fine and I like its simplicity - but I haven't been able to find a reference to anyone using a default value of '-' for output to indicate stdout. Is this a good consistent solution or am I overlooking something better or more expected?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于输入文件,您可以使用
fileinput
模块。它遵循输入文件的常见约定:如果没有给定文件或文件名是“-”,则它读取标准输入,否则它从命令行给出的文件中读取。不需要
-f
和--file
选项。如果您的程序始终需要输入文件,那么它不是一个选项。-o
和--output
用于指定 各种程序中的输出文件名。optparse
argparse
argparse
模块允许您显式指定文件作为参数:注意:我在第二个示例中添加了
--inplace
选项:For input files you could use
fileinput
module. It follows common convention for input files: if no files given or filename is '-' it reads stdin, otherwise it reads from files given at a command-line.There is no need in
-f
and--file
options. If your program always requires an input file then it is not an option.-o
and--output
is used to specify the output file name in various programs.optparse
argparse
argparse
module allows you to specify explicitly files as arguments:Note: I've added
--inplace
option in the second example:如果您可以使用
argparse
(即 Python 2.7+),它对您想要的内容有内置支持:直接来自argparse
文档所以我的建议是简单地使用
然后你可以
从
file
读取并输出到output
,或者读取
"Ni!"
并输出到输出
,或者...
这很好,因为使用
-
作为相关流是许多程序使用的约定。如果您想指出它,请将其添加到help
字符串中。作为参考,使用消息将是
If you can use
argparse
(i.e. Python 2.7+), it has built-in support for what you want: straight fromargparse
docSo my advice is to simply use
Then you can do
To read from
file
and output tooutput
, orto read
"Ni!"
and output tooutput
, or…
And it's good, since using
-
for the relevant stream is a convention that a lot of programs use. If you want to point it out, add it to thehelp
strings.For reference, the usage message will be