关于python:术语:Argv,调用程序

Terminology: Argv, Invoking a program

hy python社区-

这是关于argv和"invoke"的基本术语问题

我不熟悉Python和编程。

我在openbookproject.com上阅读有关sys模块中argv函数的内容:

"argv变量保存运行python脚本时从命令行读取的字符串列表。这些命令行参数可用于在调用程序的同时将信息传递到程序中。"http://openbookproject.net/thinkcs/python/english2e/ch10.html

从定义上看,这似乎很清楚,但我还是想再次检查一下:"当您运行程序时,在调用它的时候"是不是仅仅意味着"当您运行程序时"?用第三种方式来说,"argv可以在运行时将信息传递给程序"是否合适?

谢谢您。


Does"at the time it is invoked" just mean,"when you run the program?"

是的。"同时,它被调用"意味着以后在程序运行时可以将数据传递给程序,也就是说,可以使用命令行参数(sys.argv将数据"同时调用"给程序,以及其他一些方法(ipc)稍后传递数据,例如,在程序运行时通过标准输入。

Would it be appropriate in a third way to say,"Argv can pass information into a program at runtime?"

不。

argv定义了命令行对进程的外观,例如,argv[0]设置了进程的一个名称(另一个名称是从实际可执行文件的路径派生的)。在posix上,argv是传递给c main(argc, argv)exec*()函数的参数,它是c程序的入口点。

换句话说,argv用于调用(启动/运行)进程,但正如@g fetterman所提到的"运行时"可能指的是整个进程的运行时间,而不仅仅是调用时间。即使在进程运行之前,也可以知道argv,并且在进程启动之后,argv通常保持不变。


  • 是的,这就是"被调用"的意思。

  • 不,因为"在运行时"涵盖了进程运行的整个时间窗口。准确地说,argv可以在调用时将信息传递到程序中。


  • 是的,没错。考虑以下代码testargs.py

    1
    2
    3
    import sys

    print(sys.argv[1])

    当您以python testargs.py banana的形式运行这个脚本时,您会看到结果打印出"banana"。注意argv[0]是脚本名,后面给出的任何参数都是argv[1]、argv[2]等等。要更复杂地使用命令行参数,请考虑使用argparse模块,该模块包含添加帮助文档和其他功能的选项。

    编辑:我只讨论被调用的部分,而不是运行时问题。