我有十几个可以通过stdin或选项接受输入的程序,我想以类似的方式为输出实现相同的功能.
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.')
Run Code Online (Sandbox Code Playgroud)
其余适用的代码如下所示:
if opts.filename == '-':
infile = sys.stdin
else:
infile = open(opts.filename, "r")
if opts.output == '-':
outfile = sys.stdout
else:
outfile = open(opts.output, "w")
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常,我喜欢它的简单性 - 但是我无法找到任何使用默认值' - '表示stdout的人的引用.这是一个很好的一致解决方案还是我忽略了更好或更期望的事情?
Redshift文档将时间序列表标识为最佳实践:http: //docs.aws.amazon.com/redshift/latest/dg/c_best-practices-time-series-tables.html
但是,它没有解决以下任何问题:
我的情况:
我建议的解决方案
编辑:添加说明,确定已回答哪些问题,并为建议的解决方案添加一些细节.
我有一个简单的类,它通过 init 获取它的大部分参数,它还运行各种完成大部分工作的私有方法。输出可通过访问对象变量或公共方法获得。
这就是问题所在——我希望我的 unittest 框架直接调用 init 调用的私有方法,并使用不同的数据——而无需通过 init.d 。
做到这一点的最佳方法是什么?
到目前为止,我一直在重构这些类,以便 init 做更少的事情并且单独传入数据。这使测试变得容易,但我认为该类的可用性受到了一些影响。
编辑:基于伊格纳西奥回答的示例解决方案:
import types
class C(object):
def __init__(self, number):
new_number = self._foo(number)
self._bar(new_number)
def _foo(self, number):
return number * 2
def _bar(self, number):
print number * 10
#--- normal execution - should print 160: -------
MyC = C(8)
#--- testing execution - should print 80 --------
MyC = object.__new__(C)
MyC._bar(8)
Run Code Online (Sandbox Code Playgroud) 我有一个包含大量潜在args的程序.它基本上允许用户get/set/delete/list在非常小的数据库中的任何表.每列都有一个可以传递的arg.
这不是主界面,只是偶尔有用的管理界面.
无论如何,如果用户想要在表中插入一行,他必须知道所有列的名称.虽然从帮助中很容易看出 - 但这也是一个痛苦的屁股.
所以,我已经更改了代码,因此用户可以传递--prompt选项,程序将提示他们输入与他们指定的表关联的每个列名.但我的问题是我现在需要在两个地方复制我的输入约束(选择,类型等) - argparse和这个提示功能.
谢谢
我正在寻找一个位于文件之上的元数据层,它可以解释文件名中信息的键值对,以便处理数千个文件.更多信息:
我想要的功能包括:
嵌入了这些简单元数据的文件可能如下所示:
此元数据非常易于访问并与文件紧密连接.但是 - 我宁愿避免在所有操作中使用切割卡或外卡.
我环顾四周,只能找到媒体和操作系统元数据解决方案,如果它已经存在,就不想构建它.
我有一个大型复杂的应用程序,它大量使用Python日志记录模块.
我需要开始将这些日志记录到Kafka集群中,并且需要确保我不会在此过程中更改数据.
对我来说,理想的解决方案是为Kafka创建一个新的处理程序 - 并允许日志并行转发旧的日志记录解决方案和kafka.然后最终关闭旧的日志处理程序,然后发送给Kafka.
但是,我没有看到任何kafka日志处理程序 - 只有kafka客户端.添加kafka客户端意味着跟踪每个当前的日志记录调用并向新的kafka客户端添加单独的调用.获得相同的结果将是困难的.
python ×5
apache-kafka ×1
argparse ×1
file ×1
metadata ×1
optparse ×1
stdin ×1
stdout ×1
unit-testing ×1