从脚本和命令行中访问功能

时间:2013-06-18 08:45:03

标签: python

我想做以下事情:

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

e.g。我有班级“测试”。它有一个“quicktest”功能(基本上只是打印一些东西)。 (来自命令行)我希望能够

$ 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"

3 个答案:

答案 0 :(得分:4)

尝试以下操作(请注意,不同的缩进,if __name__部分 不再是<{1}}的一部分):

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."

答案 1 :(得分: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:])

答案 2 :(得分:0)

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

您的类具有参数的方法和关联方法。