誰もがClass too big and hard to add new featuresで質問に完全にunphasedですが、何らかの方法でコマンドラインオプションをメソッドに接続していますが、これに関するドキュメントは見つかりません。 optparse
、または、またはsys.argv
ではありません。この質問は、メソッドとコマンドラインオプションの間に直接関係があることを意味します。私は何が欠けていますか?Pythonのコマンドライン引数はメソッドにどのように関係していますか?
1
A
答えて
1
私は単純にこのようなクラスを使用していますが、非常に良い考えではないようです。
class myprogram(object):
def __init__(self)
self.prepare()
def prepare(self):
# some initializations
self.prepareCommands()
def prepareCommands(self):
self.initCommand("--updateDatabase", self.updateDatabase)
self.initCommand("--getImages", self.getImages)
# and so on
def initCommand(self, cmd, func):
options = sys.argv
for option in options:
if option.find(cmd)!=-1:
return func()
# my commands
def updateDatabase(self):
#...
def getImages(self):
#...
if __name__ == "__main__":
p = myprogram()
EDIT1:ここに 私はちょうど実装きれいな方法:
myprogram.py:
from config import * # has settings
from commands import *
from logsys import log
import filesys
class myprogram(object):
def __init__(self):
log(_class=self.__name__, _func='__init__', _level=0)
log(_class=self.__name__, _func='__init__', text="DEBUG LEVEL %s" % settings["debug"], _level=0)
self.settings = settings
self.cmds = commands
def prepare(self):
log(_class=self.__name__, _func='prepare', _level=1)
self.dirs = {}
for key in settings["dir"].keys():
self.dirs[key] = settings["dir"][key]
filesys.checkDir(self.dirs[key])
def initCommands(self):
log(_class=self.__name__, _func='initCommands', _level=1)
options = sys.argv
for option in options:
for cmd in self.cmds.keys():
if option.find(cmd) != -1:
return self.cmds[cmd]()
if __name__ == '__main__':
p = myprogram()
p.prepare()
p.initCommands()
commands.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
commands = {}
#csv
import csvsys
commands["--getCSV"] = csvsys.getCSV
#commands["--getCSVSplitted"] = csvsys.getCSVSplitted
# update & insert
import database
commands["--insertProductSpecification"] = database.insertProductSpecification
# download
import download
commands["--downloadProductSites"] = download.downloadProductSites
commands["--downloadImages"] = download.downloadImages
# parse
import parse
commands["--parseProductSites"] = parse.parseProductSites
EDIT2:私は今、更新してきたが私の質問は、より完全な例であなたの質問にリンクしましたClass too big and hard to add new features
4
これらの間にはストーンリンクはありません。あなたがリンクしている質問は、いくつかの異なることのうちの1つを行うことができるプログラムであり、コマンドライン引数はそれらの間で切り替わります。これらののものは、メソッドを使用してプログラムで実装されます。
これらの間に接着剤を書くにはのようなものを使用していたという疑問が暗示されています。メソッドの使用は、特定のプログラムの実装の詳細です。
関連する問題
- 1. Windowsコマンドライン引数にはどのようにアクセスしますか?
- 2. argparseとの関係を持つコマンドライン引数を扱うには?
- 3. jQueryは関数型プログラミングとどのように関係していますか?
- 4. 引数はどのようにPythonの関数に渡されますか?
- 5. Getopt :: Stdはコマンドラインで引数のスペースをどのように扱いますか?
- 6. PHP関数の依存関係はどのように機能しますか?
- 7. Pythonの "print"関数はどのように機能していますか?
- 8. Flask-Loginのrequest_loaderはuser_loaderにどのように関係していますか?
- 9. AppDomain.ExecuteAssemblyにコマンドライン引数を渡すにはどうすればよいですか?
- 10. SBT動的プロジェクトの依存関係(コマンドライン引数に基づく)
- 11. Pythonのデフォルトパラメータ、コマンドライン引数は
- 12. Sidekiqは引数をperformメソッドにどのように渡しますか?
- 13. XMLHttpRequestはJSウィンドウオブジェクトにどのように関係しますか
- 14. コマンドライン引数としてモジュール/メソッド名を渡す方法python 2.7.10
- 15. spark.streaming.blockIntervalはRDDパーティションにどのように関係していますか?
- 16. TDDは極限プログラミングにどのように関係していますか?
- 17. Plugin.xmlはどのようにOSGi仕様に関係していますか?
- 18. Pythonでsys.stdin.readlines()とコマンドライン引数をサポートしていますか?
- 19. stdinコマンドライン引数としてのPythonプリントリダイレクト
- 20. ListViewのItemCollectionsはどのように関係していますか?
- 21. IronPythonでコマンドライン引数を渡すにはどうすればよいですか?
- 22. コマンドライン引数を指定するにはどうすればよいですか?
- 23. Pythonのスーパーコンストラクタ - どの引数を子メソッドに入れますか?
- 24. コマンドライン引数でファイルを開くにはどうすればよいですか?
- 25. 保護されていないメソッドは、関係のないクラスでどのようにアクセスできますか?
- 26. この引数は、呼び出された関数にどのように移行していますか?
- 27. メソッド `self`引数にはどのような型を使用しますか?
- 28. はどのように私は関数の引数にMongoDB
- 29. ASP.NET IDとThinktecture.IdentityModelライブラリはどのように関係していますか?
- 30. Webサービスとデータベースはどのように関係していますか?
あなたの例の問題の1つは、--max-val 5や--treads = 5のような引数に値を与える方法がないということです。 –
yes thats true実際、しかし私は特定の引数を必要としませんでした私の "コマンド"は、神のクラス自身が何をすべきかを知っていたからです。^^ –
うわー、私はそのようなことをすることは考えていませんでした!面白い。 – weronika