当脚本从WIndows命令行运行时,PyQt Qstring不被接受,为什么?

2024-04-19 06:38:59 发布

您现在位置:Python中文网/ 问答频道 /正文

在x64机器上使用PyQt 4、python2.7、windows7。在

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

但是当我在Windows中尝试从命令行运行时,我得到了以下错误

TypeError: sequence item 0: expected string, QString found

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


Tags: 字符串代码命令行cmd机器os部件情况
2条回答

我认为出现这个问题是因为命令行参数实际上是字节数组而不是字符串,字符串是用Unicode编码的,而字节数组不是。调用str(cmd)cmd的内容作为字符串返回。在

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

因此,PyQt documentation介绍了如何使用sip模块禁用QStrings。只需在导入PyQt4之前。在

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

如果在Python脚本中执行此操作,那么控制台和命令行之间的行为应该是相同的。在

您还可以执行类似的操作来禁用QVariant和其他恼人的Qt类型,这些类型在Python中通常是没有意义的。在

相关问题 更多 >