从脚本和命令行中访问函数

4

我希望能够实现以下功能:

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

例如,我有一个名为“test”的类。它有一个名为“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个回答

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(...)

谢谢,将 if __name__ 部分移到类外面解决了问题。没想到能在几秒钟内得到答案,更不用说对于这个奇怪的问题了 ;) - Droids

1
< p > if __name__ == '__main__': 块需要在最顶层:< /p >
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:])

谢谢,将__main__移动到顶层解决了问题。还感谢您提供有关Python类名称的信息。 - Droids

0

您可以使用argparse解析命令行,以从命令行中获取值。

您的类具有方法和相关方法来处理参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接