如何从命令行打开Python方法(多个方法选择)

How to open a Python method from command line (Multiple method choices)

本问题已经有最佳答案,请猛点这里访问。

首先,我对python还是个新手。我正在尝试用以下两种方法生成一个python文件:

1
2
3
4
5
def hello():
    print("Hello.")

def bye():
    print("Bye bye.")

我知道只有一种方法的选择。

1
2
if __name__ =="__main__":
    hello()

这将允许使用以下命令从cmd打开文件:

1
>python file.py

同样,它将打开文件,但部署hello(),我需要一些东西让用户选择hello()或bye()方法。在因特网上,我看到下面的命令

1
2
>python file.py hello()
>python file.py bye()

不知怎的有用,但我不知道怎么做,有人知道吗?

问候语!


您需要处理命令行参数,这些参数在sys.argv中可用。

最直接的方法是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys

def hello():
    print("Hello.")

def bye():
    print("Bye bye.")

def main():
    funcname = sys.argv[1]
    if funcname == 'hello':
        hello()
    elif funcname == 'bye':
        bye()
    else:
        print("ERROR: Invalid function")  

if __name__ == '__main__':
    main()

这方面的一个改进是创建一个映射:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys

def hello():
    print("Hello.")

def bye():
    print("Bye bye.")

def main():
    funcmap = {
        'hello': hello,
        'bye':   bye,
    }
    def invalid():
        print("ERROR: Invalid function")
        sys.exit(1)

    funcname = sys.argv[1]
    f = funcmap.get(funcname, invalid)
    f()

if __name__ == '__main__':
    main()

如果您想要更复杂的东西,比如git处理子命令的方式,例如git push origin mastergit status,那么我建议使用argparse子解析器。有关详细信息,请参阅此问题/答案。