ドキュメントは、CommandLineApp のサブクラス化について非常に曖昧であり、1 つの例のみに言及しています。
class YourApp(cli.app.CommandLineApp):
def main(self):
do_stuff()
だから私が見つけた情報で、このコードをつなぎ合わせました:
#!/usr/bin/env python
import os
import sys
from cli.app import CommandLineApp
# Append the parent folder to the python path
sys.path.append(os.path.join(os.path.dirname(__file__), '../'))
import tabulardata
from addrtools import extract_address
class SplitAddressApp(CommandLineApp):
def main(self):
"""
Split an address from one column to separate columns.
"""
table = tabulardata.from_file(self.params.file)
def for_each_row(i, item):
addr = extract_address(item['Address'])
print '%-3d %-75s %s' % (i, item['Address'], repr(addr))
table.each(for_each_row)
def setup(self):
self.add_param('file', metavar='FILE', help='The data file.')
self.add_param(
'cols', metavar='ADDRESS_COLUMN', nargs='+',
help='The name of the address column. If multiple names are ' + \
'passed, each column will be checked for an address in order'
)
if __name__ == '__main__':
SplitAddressApp().run()
これは私には正しいようです。ドキュメントには、setup
サブクラス化を使用する場合のメソッドの処理方法やアプリケーションの実行方法に関する例はありません。エラーが発生します:
トレースバック (最新の呼び出しが最後): ファイル「bin/split_address_column」の 36 行目 SplitAddressApp().run() ファイル "/Users/tomas/.pythonbrew/venvs/Python-2.7.3/address_cleaner/lib/python2.7/site-packages/cli/app.py"、440 行目、__init__ 内 Application.__init__(self, main, **kwargs) ファイル "/Users/tomas/.pythonbrew/venvs/Python-2.7.3/address_cleaner/lib/python2.7/site-packages/cli/app.py"、129 行目、__init__ 内 self.setup() ファイル「bin/split_address_column」、28 行目、セットアップ中 self.add_param('file', metavar='FILE', help='データ ファイル') ファイル「/Users/tomas/.pythonbrew/venvs/Python-2.7.3/address_cleaner/lib/python2.7/site-packages/cli/app.py」、385行目、add_param アクション = self.argparser.add_argument(*args, **kwargs) AttributeError: 'SplitAddressApp' オブジェクトに属性 'argparser' がありません
おそらく私は何か間違ったことをしているのですが、何ですか?