python从bash shell调用自定义函数

时间:2016-01-19 09:36:19

标签: python bash shell

如何从bash shell调用python脚本中的自定义函数?

我尝试使用sys.argv [1],但无法正常工作。

例如,

import sys

if __name__=='__main__':
    try:
        func = sys.argv[1]
    except: func = None

def function1():
~~~~~~~~
return a

def function2():
~~~~~~~~
return b

在这里,我想通过输入类似

来调用函数1或函数2

$ script.py function1

$ script.py function2

4 个答案:

答案 0 :(得分:6)

您正在获取功能名称,但您没有运行它。您应首先检查func名称是否是您的函数之一,而不是执行它:

if __name__=='__main__':
    try:
        func = sys.argv[1]
    except: 
        func = None

functions = {    
              "function1": function1,
              "function2": function2
              }

if func in functions:
    functions[func]()

更简单的解决方案:

 if func == "function1":
     function1()
 elif func == "function2":
     function2()

答案 1 :(得分:3)

我建议使用argparse模块:https://docs.python.org/3/library/argparse.html#module-argparse

你以后会感谢自己。

对于你的情况 - 因为你当时只需要调用一个函数 - 你可以使用位置参数:

import argparse

def function1():
    print("1")

def function2():
    print("2")

parser = argparse.ArgumentParser()

F_MAP = {'function1': function1,
         'function2': function2}

parser.add_argument('function', choices=F_MAP.keys())

args = parser.parse_args()

F_MAP[args.function]()

作为奖励,当使用-h参数调用时,您会得到一个很好的帮助页面:)

答案 2 :(得分:1)

@ bigOTHER的答案是好的和正确的,但是如果你想构建一个相对复杂的文本用户界面,可能会看看像Click这样的东西吗?

答案 3 :(得分:1)

您可以参考Display a list of user defined functions in the Python IDLE session

import types
list_function = [f for f in globals().values() if type(f) == types.FunctionType]

这将返回可用函数列表,然后你可以检查其中是否有任何包含sys.argv [1],如果是,那么你可以调用你的函数

list_function[index]()