高通公司的QPST自动化服务器采用Python2.7,使用win32com modu

2024-05-23 23:50:06 发布

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

这里是Python新手。所以,请原谅之前有人以不同的形式问过这个问题。在

我尝试使用win32com模块在Python中复制以下perl代码片段。此代码段由Qualcomm提供,以便于工具的自动化。在

use Win32::OLE;
use Win32::OLE::Variant;
$prod_id = "QPSTAtmnServer.Application"; # AppId for the Automation server.
eval{ $qpst = Win32::OLE->GetActiveObject($prod_id)}; # Attempt to use a running instance.
die "$prod_id not installed" if $@;
unless (defined $qpst) { $qpst = Win32::OLE->new($prod_id, sub {$_[0]->Quit;}) or die "Cannot start $prod_id";} # Start a new instance. Call Quit when $qpst set to undef or script exits.
if (defined $qpst)
{
    $port = $qpst->GetPort("COM30001");
}

到目前为止,我拥有的python代码块如下:

^{pr2}$

它会抛出以下错误:

回溯(最近一次呼叫):

文件”xxxx.py公司“,第20行,模块

port = qpst.GetPort('30001')

TypeError:“NoneType”对象不可调用

在阅读了几篇文章之后,似乎方法(GetPort)并没有注册为一个方法。在

这种分析正确吗?在

如果是,我如何让Python将其解释为一个方法?在

如果没有,错误是怎么回事?在

提前感谢您的帮助!在


Tags: 模块to方法instance代码idifuse
2条回答

正确,它是说GetPort不存在。您检查过Perl版本是否正常工作了吗?如果没有Perl,可以尝试使用Excel的VBA(打开它的VBA控制台,您可能需要按照步骤here)来启用它。如果您可以从excelvba中显示QPST并执行GetPort,那么有些事情是非常奇怪的。在

可能是QPST COM接口在编写此脚本后发生了更改。你可以试试

qpst = win32com.client.gencache.EnsureDispatch(
           'QPSTAtmnServer.Application')

它将尝试为QPST创建类型库。有时它会发现额外的对象,但如果不是,至少可以使用combrowse.py公司(它是pywin32的一部分)并尝试查找该函数的位置。Combrowse是一个基本的COM浏览器,只需运行\Lib\site packages\win32com\client\combrowse.py公司,如果需要更强大的功能,那么来自visualstudio的可能更好。在

看来我得做几件事来解决这个问题。在

  1. 在“AtmnServer”OLE类型库文件上使用makepy命令在以下位置创建*.py文件:

    ...\Python27\Lib\site-packages\win32com\gen_py\
    
  2. 添加额外的一行,将所需方法实际解释为方法(而不是属性/属性或其他):

    ^{pr2}$

    行前:

    port = qpst.GetPort("COM30001")
    

再次感谢您的帮助!在

相关问题 更多 >