sys.argv在python PyQt4中使用了什么


问题内容

在编程方面,我还是一个初学者,而在GUI编程方面,我尤其是新手。我在遵循教程指南的同时将python与PyQt4和im一起使用。以下代码块相对容易遵循:

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(自变量计数=数量的参数)和argv(阵列,或参数值的列表中,根据语言) 是什么操作系统给到程序作为参数。
在其他世界中:“它是如何被命名的”。

正如cptPH的答案明确指出的那样,这并非特定于QtPython。在这里看看:

https://zh.wikipedia.org/wiki/入口点

对于C和C ++:

https://zh.wikipedia.org/wiki/Entry_point#C_and_C.2B.2B

对于Python:

https://zh.wikipedia.org/wiki/Entry_point#Python

甚至shell脚本也有这些,称为“位置参数”:

http://www.tldp.org/LDP/abs/html/othertypesv.html

即使您的程序根本不使用命令行选项,无论是哪种语言或操作系统(除非非常 非常 奇特的语言),您也将始终必须达到最低要求:

  • aargc之1,因为
  • argv数字0将是调用程序的名称(例如,如果您通过符号链接调用它,或者仅仅是因为您更改了构建过程的目标二进制文件,并且程序“ foo”现在是“ bar “-使用前:打印输出时不要使用硬编码的程序名称,而应使用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 ]

…这些argv对于Python解释器都是可能的。

编辑:

Qt应用程序的实际示例:

我参加了开发的Qt网络应用程序。它可以在两种互斥模式下运行:

  • “正常模式,
  • 或“间谍模式”:这很特殊,因为某些低级操作需要网络管理员特权。

因此,我向其中添加了CLI -s/--spy-modeCLI选项。这些是可选的argv

在应用程序代码的开头,我检查了此argv -s/--spy-modeCLI选项

  • 如果在不带此选项的“普通”模式下运行 ,则甚至不会向用户显示与“间谍”模式相关的GUI元素,也不会实例化其任何类。这很干净,因为否则它在许多对象实例化/方法中无论如何都会失败,并且到处都是错误,因为低级调用仍然会失败,然后我将返回一个非零的返回码。这是不好的。如果您可能失败,请尽快失败。
  • 如果使用此argv选项以“间谍”模式启动,则我在代码中要做的第一件事是检查主叫用户确实具有这种“网络管理员”特权,然后1 /(如果没有)发出明确的错误消息/弹出窗口,说明“您应该具有blablabla特权,blablabal尝试sudo blablabla”,然后使用非零返回码退出;或者如果用户确实具有所需的特权,则返回2 /,请提供特殊的“间谍模式” GUI元素并将它们投入使用,没问题(并且隐藏了大多数GUI“正常模式”元素,在这种操作模式下毫无意义)。

这是argc/argv有好处的。