【问题标题】:how to call a python function and give its parameters from the command line?如何从命令行调用 python 函数并给出其参数?
【发布时间】:2014-06-10 13:18:56
【问题描述】:

假设我有一个 python 脚本 (test.py),它包含一个函数,该函数接受一个字符串并打印回来,如下所示

def pri(str):
    print str

如何从命令行调用此函数 (pri)? 我试过了:

$python test.py pri(blablalba)

但我收到以下错误: 缺少字符串结尾

【问题讨论】:

  • 谢谢大家的回答.. 他们都为我工作:) 不过,由于我是初学者,安迪和锂的回答结构清晰。

标签: python shell command-line


【解决方案1】:

您可以像调用任何命令行程序一样调用 python 程序:

python test.py blablabla

然后在程序内部你会这样做:

import sys
print sys.argv

sys 的 argv 变量是通过命令行传递给被调用程序的所有参数的列表。因此,如果您想调用特定的参数编号,则可以将其视为列表。如果你想让一个方法打印出这些参数,你要么需要将它们传递给方法,要么让方法使用该变量。在你的情况下,你会想要这样的东西:

import sys

def pri(str):
    print str

for each in sys.argv[1:]:
    pri(each)

【讨论】:

  • 如果,另外,pri 也应该在命令行上给出,类似locals()[argv[1]](*argv[2:]) 应该可以工作。
  • 正确,但我认为他们只是想要一些简单的东西来传递参数。如果是这种情况,我建议使用 argparse 之类的东西来跟踪哪些参数是哪些参数,并根据设置的标志限制调用的方法。
【解决方案2】:

你可以这样调用它(假设你的函数保存在一个名为test.py的文件中)

python -c "from test import pri; pri('test')"

这将输出单词test

如果您的文件名称不是 test.py,请在导入语句中替换单词 test

>python -c "from test import pri; pri('test')"
test

【讨论】:

    【解决方案3】:

    您应该使用sys.argv。 argv 是通过命令行传递的所有参数的列表。

    试试这个:

    import sys
    
    def pri(s):
        print s
    
    pri(sys.argv[1])
    

    你可以运行它python test.py blablabla

    【讨论】:

      【解决方案4】:

      我会坚持你使用if __name__ == '__main__' 构造。它允许您的模块仍然可以导入并且可以从命令行使用。

      对于您的用例,它可能类似于

      import sys
      
      def pri(s):
         # you stuff
      
      # other stuff
      
      if __name__ == '__main__':
          # test presence of params and display comprehensive errors if not applicable
          # ...
          pri(sys.argv[1])
      

      这样python test.py blabla 会调用pri('blabla'),但您可以在另一个python 模块中执行import test 而不会自动调用pri

      【讨论】:

        【解决方案5】:
        import sys
        print (sys.argv[1])
        

        你需要使用sys.argv[1]

        如果您将其保存在脚本调用 pri.py 中

        在命令行使用pythonpri.pyhello会输出hello

        要打印多个单词:

        import sys
        
        def pri(s):   
            print s
        if __name__=="__main__":
            s = " ".join(sys.argv[1:])
            pri(s)
        

        【讨论】:

          猜你喜欢
          • 2015-08-20
          • 2018-06-09
          • 2017-06-08
          • 1970-01-01
          • 2013-05-25
          • 2019-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多