什么是python PyQt4中使用的sys.argv

在编程方面,我还是初学者,在GUI编程方面,我是新手.我正在使用python和PyQt4,我正在遵循教程指南.以下代码块相对容易理解:

import sys
from PyQt4 import QtGui
def window():
    app = QtGui.QApplication(sys.argv)
    w = QtGui.QWidget()
    b= QtGui.QLabel(w)
    b.setText("Hello World!")
    w.setGeometry(100,100,200,50)
    b.move(50,20)
    w.setWindowTitle(“PyQt”)
    w.show()
    sys.exit(app.exec_())
if __name__ == '__main__':
    window()

我可以很好地了解这里发生的事情,但有人可以向我解释一下sys.argv实际上在做什么吗?我不想只是盲目地把它放在每一次,希望它能使我的代码工作!

最佳答案
argc(参数count =参数数)和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

即使你的程序根本没有命令行选项,无论语言或操作系统如何(除非非常非常奇特的),你总是需要最低限度:

> a argc为1,因为,
> argv number 0将是调用程序的名称
(这可能会有所不同,例如,如果您通过符号链接调用它,或者
只是因为你改变了构建过程的目标二进制文件,
你的程序“foo”现在是“bar” – ex use:打印输出时不要使用硬编码程序名,而是使用argv编号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网络应用程序.它可以在2种互斥模式下运行:

>“正常”模式,
>或“间谍模式”:这是特殊的,因为它需要网络
某些低级操作的管理员权限.

所以我添加了一个CLI -s / – spy-mode CLI选项.这是一个可选的argv.

在应用程序代码的开头,我检查了这个argv -s / – spy-mode CLI选项

>如果在没有此选项的情况下以“正常”模式运行,则GUI元素相关
“间谍”模式甚至根本不显示给用户,也不显示
它的班级实现了.那很干净,因为否则它会
无论如何,在许多物体实例/方法中都失败了
因为低级别的调用会失败,所以整个地方都会出错
无论如何,然后我将以非零返回码退出.那不是
好.如果您可能失败,请尽快失败.
>如果使用此argv选项以“间谍”模式启动,则首先要做的事情
我在我的代码中检查调用用户确实有这样的
“网络管理员”权限,然后1 /如果他没有,发出
一个明确的错误消息/弹出窗口,解释“你应该
有blablabla特权,blablabal尝试sudo blablabla“,然后
以非零返回码退出,如果用户确实有,则退出2
所需的权限,提供特殊的“间谍模式”GUI元素和
把它们使用,没问题(并隐藏大部分GUI“正常模式”
元素,在这种操作模式中毫无意义).

这就是argc / argv的优点.

转载注明原文:什么是python PyQt4中使用的sys.argv - 代码日志