繁体   English   中英

python从bash shell调用自定义函数

[英]python calling custom function from 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

在这里,我想通过输入like来调用函数1或函数2

$ script.py function1

$ script.py function2

您正在获取功能的名称,但您没有运行它。 您应首先检查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()

我建议使用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参数调用时,您会得到一个很好的帮助页面:)

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

您可以参考在Python IDLE会话中显示用户定义函数的列表

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

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

list_function[index]()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM