关于python:PyQt Qstring从Windows命令行运行脚本时不接受,为什么?

PyQt Qstring not accepted when script run from WIndows command line, why?

在x64机器上使用PyQt 4,Python 2.7,Windows7。

我一直在使用带有PyQt4的Python控制台开发一些代码,并将字符串从QLineEdit()小部件传递到OS命令,而没有使用os.system(cmd)

时出现问题,但是当我尝试在Windows中从命令行运行时,出现以下错误,

TypeError: sequence item 0: expected string, QString found

我通过通过str(cmd)转换有问题的字符串来解决此问题但是让我感到好奇的是,为什么只有在命令行中调用代码而不是在Python控制台中调用时才发生这种情况?


我不确定为什么会发生这种情况(假设您只是使用标准的Python控制台),但是可以配置PyQt方法以返回python字符串而不是QStrings。我怀疑您的Python控制台正在执行此操作,但是您的脚本却没有。再一次,我真的看不到为什么普通的python控制台会自动执行此操作,除非我们对普通python控制台的定义有所不同(通过普通控制台,我的意思是从终端仅运行python.exe)。但是,这是我缺少的唯一解释,实际上是您在控制台中实际运行了不同的代码并且没有意识到。

因此,PyQt文档介绍了如何使用sip模块禁用QStrings。您只需在导入PyQt4之前执行此操作。

1
2
import sip
sip.setapi('QString', 2)

如果在Python脚本中执行此操作,则控制台和命令行之间应具有相同的行为。

也可以执行禁用QVariant和其他烦人的Qt类型(在Python中通常毫无意义)的类似操作。


我认为发生此问题是因为命令行参数实际上是字节数组而不是字符串,字符串是用Unicode编码的,而字节数组不是。调用str(cmd)以字符串形式返回cmd的内容。