【问题标题】:Python: Call functions out of a scriptPython:从脚本中调用函数
【发布时间】:2015-07-15 10:07:18
【问题描述】:

假设我有以下示例脚本:

#!/usr/bin/python
import sys

def hello():
    return "Hello, I am a script!"
def bye():
    return "Hope to see you again!"

如果我从命令行python example.py调用此脚本,我如何访问hello() 和/或bye()

我只知道如何调用这样的函数:

if __name__ == '__main__':
    hello()

对cmets的回答:

  • 所以没有办法在命令行之外选择使用哪个函数?
  • 我只是想要一个包含两个不同表格比较函数的脚本,并且能够从一个脚本中选择要使用的脚本

【问题讨论】:

标签: python function call


【解决方案1】:

您可以:

python -c 'import example;example.hello()'
python -c '__import__("example").hello()'

无论您问这个问题的原因是什么(其他作家会告诉您,使用optparseargparse 通常是一个更好的主意,...就像他们在标准库中所做的那样[timeitjson] ),这可能的。

【讨论】:

    【解决方案2】:

    你不能在脚本中直接调用带有脚本参数的函数,你必须自己处理命令行参数然后调用函数:

    #!/usr/bin/python
    import sys
    
    def hello():
        return "Hello, I am a script!"
    
    def bye():
        return "Hope to see you again!"
    
    if __name__ == '__main__':
        for arg in sys.argv[1:]:
            if arg == "hello":
                print hello()
            elif arg == "bye":
                print bye()
    

    当然,您可能希望以多种方式扩展它:仅处理第一个参数(本示例处理所有参数),小写参数以便 HELLOBYE 也可以工作,或者可能显示如果没有给出参数,则可以提供一些帮助。

    正如@bufh 所提到的,如果您的命令行参数变得比这复杂得多,那么您可能需要研究一个为您处理它的库,例如argparse

    【讨论】:

      【解决方案3】:

      一种快速而肮脏的方法是:

      import sys
      
      def hello():
          print "Hello world"
      
      def goodbye():
          print "Goodbye, cruel world!"
      
      if __name__ == "__main__":
          func_name = sys.argv[1]
          func = globals()[func_name]
          func()
      

      然后您可以运行myscript.py hellomyscript.py goodbye,当您添加其他全局/顶级函数时,它们将立即生效。

      不过,更好的方法是使用argparse 甚至https://docs.python.org/dev/library/argparse.html#sub-commands 之类的东西

      【讨论】:

        猜你喜欢
        • 2012-01-23
        • 2017-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多