代码之家  ›  专栏  ›  技术社区  ›  Souvik Ray

如何从命令行运行不包含在if_uu name_uu==“uu main_uuuuu”中的单独函数?

  •  2
  • Souvik Ray  · 技术社区  · 6 年前

    我有一个包含以下代码的python文件

    测试.py

    def sum(a, b):
        print(a+b)
    
    def final():
        print("Hello")
        sum(10, 9)
    
    
    if __name__=="__main__":
        final()
    

    现在当我从命令行运行时

    python test.py
    

    我得到

    Hello
    19
    

    现在我想添加一个函数 say 这将与命令行分开调用。我该怎么做?所以我更新的代码是

    def sum(a, b):
        print(a+b)
    
    def say():
        print("Yes!!!")
    
    def final():
        print("Hello")
        sum(10, 9)
    
    
    if __name__=="__main__":
        final()
    

    所以现在我想调用函数 分开,我试过这样做

    python test.py say
    

    但是它只输出前面的结果,我如何才能使这个工作呢?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Jacob Taxén    6 年前

    从源文件所在的目录启动命令行上的python解释器。那你就可以了

    from test import say
    say()
    

    编辑:

    根据上面的注释,您可以检查sys.argv以查找是否使用“say”调用模块:

    import sys
    
    if __name__ == '__main__':
        if 'say' in sys.argv:
            say()
        else:
            final()
    

    sys.argv是一个包含所有参数的列表,如果从命令行运行

    python test.py say foo bar
    

    然后

    sys.argv = ['test.py', 'say', 'foo', 'bar']
    

    在你的程序中。

        2
  •  2
  •   Daniel    6 年前

    你的代码必须知道该怎么做。这给你留下了两个选择:

    1。代码将根据外部信息决定要做什么:

    a.从环境中读取变量:

    import os
    
    if os.environ.get('TERM') == 'xterm-256color':
        say()
    else:
        final()
    

    您可以在调用脚本之前设置环境变量,如下所示:

    # set the variable
    $ export VARIABLE=VALUE
    
    # Python will recognize it:
    $ python -c "import os; print(os.environ.get('VARIABLE'))"
    $ VALUE
    

    B.掷骰子:

    from random import randint
    
    if randint(0,6) > 3:
        say()
    else:
        final()
    

    2。您将告诉代码要做什么:

    a.检查sys.argv(参见其他答案)。

    B. 推荐: 使用 argparse library 要分析命令:

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument("--say", help="If say, then say", action="store_true")
    args = parser.parse_args()
    
    if args.say:
       say()
    else:
       final()
    

    现在,从命令行运行: python test.py --say

    argparse是标准python库的一部分,具有优秀的文档,易于使用和阅读,而且(在我看来)非常灵活。

    c.对于较大的脚本/项目,请使用设置工具入口点: 细节 on this related question this post .