argc(参数计数 = 参数数量)和 argv(数组或参数值列表,取决于语言)是操作系统作为参数提供给程序的。在其他世界中:“它是如何被调用的”。
正如 cptPH 的回答明确指出的那样,这并不特定于 Qt 或 Python。看看这里:
https://en.wikipedia.org/wiki/Entry_point
对于 C 和 C++:
https://en.wikipedia.org/wiki/Entry_point#C_and_C.2B.2B
对于 Python:
https://en.wikipedia.org/wiki/Entry_point#Python
即使是 shell 脚本也有这些,称为“位置参数”:
http://www.tldp.org/LDP/abs/html/othertypesv.html
即使您的程序根本不使用命令行选项,无论是哪种语言或操作系统(除非非常、非常 异国情调的),您也将始终保持最低限度:
-
argc 为 1,因为,
-
argv 数字 0 将是调用程序的名称
(这可能会有所不同,例如,如果您通过符号链接调用它,或者
仅仅因为您更改了构建过程的目标二进制文件,
并且您的程序“foo”现在是“bar” - 前使用:打印输出时不要使用硬编码的程序名称,而是使用 argv number 0)。
迟早,您将编写使用选项/参数的程序。所以你会使用这些。示例:您可能想要添加“--verbose”或“--debug”选项。或者“--input-file”,如果它是关于文件处理的。任何。您的程序将在启动时解析这些 argv,并通过您明智的编码,相应地更改其运行时行为。
示例:即使是 Python 也可以接受很多可选选项,并使用 argc/argv 处理它们。来自 Python 3 手册页:
python [ -B ] [ -b ] [ -d ] [ -E ] [ -h ] [ -i ] [ -I ]
[ -m module-name ] [ -q ] [ -O ] [ -OO ] [ -s ] [ -S ] [ -u ]
[ -v ] [ -V ] [ -W argument ] [ -x ] [ [ -X option ] -? ]
[ -c command | script | - ] [ arguments ]
...对于 Python 解释器,这些都是可能的argv。
编辑:
Qt 应用程序的真实示例:
我参与开发了一个 Qt 网络应用程序。它可以在两种互斥模式下运行:
- “正常”模式,
- 或“间谍模式”:这是特殊的,因为它需要网络
一些低级操作的管理员权限。
所以我添加了一个 CLI -s/--spy-mode CLI 选项。这是一个可选的argv。
在应用程序代码的开头,我检查了这个 argv -s/--spy-mode CLI 选项
-
如果在没有此选项的情况下以“正常”模式运行,则相关的 GUI 元素
到“间谍”模式甚至根本不会显示给用户,也没有任何
它的类实例化了。那是干净的,因为否则它会
在许多对象实例化/方法中无论如何都失败了,
到处都是错误,因为低级调用会失败
无论如何,然后我会以非零返回码退出。那不是
好的。如果您可能会失败,请尽快失败。
-
如果使用此
argv 选项以“间谍”模式启动,首先要做的就是
我在我的代码中做的是检查调用用户是否确实有这样的
“网络管理员”权限,然后 1/ 如果他没有,则发出
一个明确的错误消息/弹出窗口解释“你应该
拥有 blablabla 特权,blablabal 尝试 sudo blablabla",然后
以非零返回码退出,或 2/ 如果用户确实有
所需的权限,提供特殊的“间谍模式”GUI 元素和
把它们用起来,没问题(并且隐藏了大部分的GUI“普通模式”
元素,在这种操作模式下毫无意义)。
这就是argc/argv 的优点。