Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python命令行参数与方法的关系如何?_Python_Command Line Arguments - Fatal编程技术网

Python命令行参数与方法的关系如何?

Python命令行参数与方法的关系如何?,python,command-line-arguments,Python,Command Line Arguments,这个问题将命令行选项与方法联系起来,但我找不到相关文档。它不是optparse,或者argparse,或者sys.argv——这个问题暗示了方法和命令行选项之间的某种直接关系。我缺少什么?我只是像这样使用这个类,这似乎不是一个好主意,因为一旦你得到了很多命令,就很难维护它 class myprogram(object): def __init__(self) self.prepare() def prepare(self): # some init

这个问题将命令行选项与方法联系起来,但我找不到相关文档。它不是
optparse
,或者
argparse
,或者
sys.argv
——这个问题暗示了方法和命令行选项之间的某种直接关系。我缺少什么?

我只是像这样使用这个类,这似乎不是一个好主意,因为一旦你得到了很多命令,就很难维护它

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()
编辑1: 这里是我刚刚实现的一种更干净的方法:

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 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()
编辑1: 这里是我刚刚实现的一种更干净的方法:

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:我现在更新了我的问题,你用一个更完整的例子链接到你的问题

它们之间没有任何固定的链接。您链接到的问题似乎是一个程序,它可以执行几种不同的操作之一,命令行参数在它们之间切换。这些事情碰巧是在程序中使用方法实现的


这个问题暗示,他们使用了类似于
argparse
的东西来编写它们之间的粘合剂;但是方法的使用只是特定程序的一个实现细节。

它们之间没有任何固定的联系。您链接到的问题似乎是一个程序,它可以执行几种不同的操作之一,命令行参数在它们之间切换。这些事情碰巧是在程序中使用方法实现的


这个问题暗示,他们使用了类似于
argparse
的东西来编写它们之间的粘合剂;但是方法的使用只是特定程序的一个实现细节。

您的示例中的一个问题是,它没有任何方法为参数赋值,例如--max val 5或--treads=5确实是这样,但我的“命令”不需要特定的参数,因为god类本身知道该做什么。^^wow,我从没想过要做那样的事!有意思。我刚刚添加了一个更简洁的方法。现在我的“上帝类”更像是一个调用函数的“指挥官”^^^你的例子中的一个问题是,它没有任何方法给参数赋值,比如--max val 5或--treads=5是的,的确如此,但我的“命令”不需要特定的参数,因为上帝类本身知道该做什么。^^^哇,我从没想过要做那样的事!有意思。我刚刚添加了一个更简洁的方法。现在我的“上帝类”更像是一个调用一些函数的“指挥官”^^