Jeder bei Class too big and hard to add new features ist völlig unphased von der Frage, die irgendwie Befehlszeilenoptionen mit Methoden verbindet, aber ich kann keine Dokumentation dafür finden. Es ist nicht optparse
oder argparse
oder sys.argv
- die Frage impliziert eine Art direkte Beziehung zwischen Methoden und Befehlszeilenoptionen. Was vermisse ich?Wie hängen Python-Befehlszeilenargumente mit Methoden zusammen?
Antwort
Ich benutze einfach die Klasse wie diese, was nicht eine sehr gute Idee zu sein scheint, denn es ist sehr schwer zu warten, sobald Sie viele Befehle erhalten haben.
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: Hier ist ein sauberer Weg ich gerade umgesetzt:
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: Ich habe jetzt aktualisiert meine Frage, die Sie mit Ihrer Frage mit einem vollständigeren Beispiel verbunden haben Class too big and hard to add new features
Es gibt keine feste Verbindung zwischen ihnen. Die Frage, die Sie verknüpfen, scheint ein Programm zu sein, das eines von mehreren verschiedenen Dingen ausführen kann, wobei Befehlsargumente zwischen ihnen wechseln. Diese Dinge passieren im Programm mit Methoden implementiert werden.
Es wird durch die Frage impliziert, dass sie etwas wie argparse
verwendet haben, um den Kleber zwischen diesen zu schreiben; aber die Verwendung von Methoden ist nur ein Implementierungsdetail des jeweiligen Programms.
- 1. Wie hängen die Agile-, Lean- und Kanban-Methoden zusammen?
- 2. Wie hängen Iteratoren und Zeiger zusammen?
- 3. Wie hängen Name und Referenzwert zusammen?
- 4. Mvc-Anwendung Async-Methoden hängen
- 5. Wie hängen NVAPI-Geräte-IDs mit CUDA-Geräte-IDs zusammen?
- 6. Wie hängen OnModelCreating und nicht automatische Migrationen zusammen?
- 7. Was ist JAXB und JAXRS? Wie hängen sie zusammen?
- 8. Wie hängen Nebenwirkungen und beobachtbares Verhalten in C++ zusammen?
- 9. Wie hängen C# - und C++/CX-Objekte zusammen?
- 10. Wie hängen Formposition und Gradientposition in HTML5-Canvas zusammen?
- 11. Logging Eingang und Ausgang von Methoden zusammen mit Parametern automatisch?
- 12. Werden Methoden auch zusammen mit den Datenmembern in .NET serialisiert?
- 13. Welche Probleme mit der Portabilität hängen mit dem Zugriff auf Zeiger auf Byteebene in C zusammen?
- 14. StringToCoTaskMemUni oder StringToCoTaskMemAnsi-Methoden können dazu führen, dass hängen?
- 15. Was ist der Unterschied zwischen Array {Bool} und BitArray in Julia und wie hängen sie zusammen?
- 16. ASP.NET MVC: Was sind Aktionsmethode? Aktion Ergebnis? Wie hängen sie zusammen?
- 17. Wie hängen cscfg-Dateien und App.config-Dateien für Azure-Worker-Rollen zusammen?
- 18. Json.createBuilderFactory und createObjectBuilder hängen
- 19. stub_chain zusammen mit soll_receive
- 20. JDBC-Verbindung hängen
- 21. Footable zusammen mit Angular.js
- 22. plt.show() macht Terminal hängen
- 23. I18n zusammen mit Uhrwerk
- 24. Regexp verursacht unendlich hängen
- 25. VS2015 Installation bleibt hängen
- 26. Python Popen(). Stdout.read() hängen
- 27. Ich habe Probleme mit Pythons `subprocess.popen` hängen
- 28. Jenkins hängen mit Gebäude Maven Job
- 29. Wie Größe von Unteransichten zusammen mit Superansichten
- 30. Wie kann ich ‚nx.draw()‘ zusammen mit ‚nx.topological_sort()‘
Eines der Probleme mit Ihrem Beispiel ist, dass es keine Möglichkeit gibt, um Argumente wie --max-val 5 oder --treads = 5 –
Wert ja, aber ich brauchte keine spezifischen Argumente für meine "Befehle", weil die Gottklasse selbst wusste, was zu tun war. ^^ –
Wow, ich dachte nie daran, so etwas zu tun! Interessant. – weronika