4

我想做以下事情:

我有一个类应该提供几个功能,这些功能需要不同的输入。我想在其他脚本中使用这些函数,或者只从命令行中使用。

例如,我有“测试”类。它有一个“快速测试”功能(基本上只是打印一些东西)。(从命令行)我希望能够

$ python test.py quicktest "foo" "bar"

而 quicktest 是函数的名称,而“foo”和“bar”是变量。

另外(从另一个脚本中)我想

from test import test

# this
t = test()
t.quicktest(["foo1", "bar1"])

# or this
test().quicktest(["foo2", "bar2"])

我只是不能把它带到工作中。我设法为第一个请求编写了一个类,为第二个请求编写了一个类,但不是为他们两个。问题是我有时必须通过(self)调用函数,有时不需要,而且我必须随时提供给定的参数,这也有点复杂。

那么,有人对此有想法吗?


这是我已经拥有的:

仅适用于命令行:

class test:
    def quicktest(params):
        pprint(params)

    if (__name__ == '__main__'):
        if (sys.argv[1] == "quicktest"):
            quicktest(sys.argv)
        else:
            print "Wrong call."

仅适用于其他脚本:

class test:
    _params = sys.argv 

    def quicktest(self, params):
        pprint(params)
        pprint(self._params)

    if (__name__ == '__main__'):
        if (sys.argv[1] == "quicktest"):
            quicktest()
        else:
            print "Wrong call"
4

3 回答 3

4

尝试以下操作(注意不同的缩进,该if __name__部分不再是类的一部分test):

class test:
    def quicktest(params):
         pprint(params)

if __name__ == '__main__':
    if sys.argv[1] == "quicktest":
        testObj = test()
        testObj.quicktest(sys.argv)
    else:
        print "Wrong call."

从其他脚本:

from test import test
testObj = test()
testObj.quicktest(...)
于 2013-06-18T08:49:04.980 回答
1

if __name__ == '__main__':块需要位于顶层:

class Test(object): # Python class names are capitalized and should inherit from object
    def __init__(self, *args):
        # parse args here so you can import and call with options too
        self.args = args

    def quicktest(self):
        return 'ret_value'

if __name__ == '__main__':
    test = Test(sys.argv[1:])
于 2013-06-18T08:53:54.697 回答
0

您可以在argparse的帮助下解析命令行以解析命令行中的值。

您的类具有方法并将方法与参数相关联。

于 2013-06-18T08:52:09.867 回答