【问题标题】:Using command line arguments in Python: Understanding sys.argv在 Python 中使用命令行参数:理解 sys.argv
【发布时间】:2011-06-13 11:59:01
【问题描述】:

我目前正在学习 Python The Hard Way。我认为这个例子可能已经过时了,所以我想在这里得到反馈。

我正在使用 Python 3.1

from sys import argv

script, first, second, third = argv

print("the script is called:", (script))
print("your first variable is:", (first))
print("your second variable is:", (second))
print("your third variable is:", (third))

我收到此错误:

Traceback (most recent call last):
  File "/path/ch13.py", line 3, in <module>
    script, first, second, third, bacon = argv
ValueError: need more than 1 value to unpack

知道有什么问题吗?

【问题讨论】:

    标签: python command-line-arguments argv


    【解决方案1】:

    这是另一种写法:

    *script_args = sys.argv
    

    【讨论】:

      【解决方案2】:

      我认为这个例子会对你有所帮助。你可以传递你想要的参数个数,即参数个数是可变的。 :D

      def main(*args):
          print("Arguments Passed: ", args)
      
      if __name__ == '__main__':
          name_Script, *script_args = sys.argv
          print("Name of the script: ", name_Script)
          main(*script_args) #Send list of arguments
      

      【讨论】:

        【解决方案3】:

        你可以的

        (script, first, second, third) = argv 
        

        并传递 3 个参数

        python filename arg1 arg2 arg3
        

        当你从命令行运行它时。

        我正在使用 Python 3.6.0。在我没有将 argv 参数包装在大括号中之前。但现在可以了。

        【讨论】:

          【解决方案4】:

          您忘记将参数传递给脚本,例如foo.py bar baz quux.

          【讨论】:

          • 我是菜鸟,用我写的代码正确的方法是什么?
          • 他说你必须在这个练习中运行命令行。打开 CMD(窗口)并输入:ex13.py script_value first_value second_value third_value
          【解决方案5】:
          from sys import argv
          a, b, c, d = argv
          print "The script is called:", a
          print "Your first variable is:", b
          print "Your second variable is:", c
          print "Your third variable is:", d
          

          将此脚本另存为:s.py

          从终端运行此脚本,如下所示:

          【讨论】:

            【解决方案6】:

            为了在命令行上运行这个脚本,你需要使用三个参数。 您必须输入类似于以下内容的内容:

            python /path/ch13.py first second third
            

            【讨论】:

              【解决方案7】:

              像这样执行代码:

              python ch13.py first second third
              

              【讨论】:

                【解决方案8】:

                您所要做的就是在打开脚本时输入任意三件事。例如,运行python(然后你的filename.py)1 2 3。“1、2和3”可以替换为任意三个数字或单词。

                【讨论】:

                  【解决方案9】:

                  您正在尝试将 argv 解压缩为单独的值。解包要求值的确切数量与要解包的值的大小相匹配。考虑一下:

                  a, b, c = [1, 2, 3]
                  

                  工作正常,但是这个:

                  a, b, c, d, e = [1]
                  

                  会给你同样的丑陋错误,你刚刚产生。以您所做的方式解包 sys.argv 尤其糟糕,因为它是用户输入,而您不知道脚本的用户将提供多少参数。所以你应该更仔细地打开它:

                  if len(argv) == 5:
                      script_name, a, b, c, d = argv
                  else:
                      print "This script needs exactly four arguments, aborting"
                      exit()
                  

                  【讨论】:

                    【解决方案10】:

                    为了传递参数,您需要以这种方式运行脚本:

                    python fileName.py argument1 argument2
                    

                    取决于你有多少变量 = 到argv,这是你需要有多少减去第一个参数(脚本)。例如,

                     script, first, second, third = argv
                    

                    应该有 3 个参数。

                    【讨论】:

                      【解决方案11】:

                      sys.arg 是命令行参数列表。您需要将命令行参数实际传递给脚本以填充此列表。可以在 IDE 的项目设置中执行此操作,也可以在命令行上像这样运行:

                      python script.py first second third
                      

                      请注意,第一个参数始终是脚本的名称(在本例中为python script.py)。由于您使用了解包,每当您传递少于或多于 3 个参数时,您都会得到一个ValueError。您可以在开箱前使用len(argv)-1检查编号,如果不是 3,则显示合适的错误。

                      在相关说明中,如果您需要进行更复杂的参数传递,请查看 getopt

                      【讨论】:

                        猜你喜欢
                        • 2014-12-08
                        • 2015-09-27
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2020-01-25
                        • 1970-01-01
                        • 2013-02-01
                        • 2017-10-29
                        相关资源
                        最近更新 更多