在VS Code和Python中自动完成Automation对象

时间:2017-12-20 06:47:30

标签: python visual-studio-code win32com jedi

我安装了适用于Windows的Python扩展程序。在PythonWin IDE中,我可以在Automation对象(特别是使用win32com.client.Dispatch创建的对象)上获得自动完成功能:

PythonWin IDE with autocomplete

如何在VS Code中获得相同的自动完成功能?

我正在使用Microsoft Python extension

Python Windows Extensions有一个名为COM Makepy的工具,它显然生成了Automation对象的Python表示,但我无法弄清楚如何使用它。

更新

显然,Microsoft Python扩展使用Jedi进行自动完成。

我已经在Github上的扩展项目中提交了issue

请注意,我一般在Python中使用Intellisense;它只是我缺少的自动化对象上的Intellisense。

3 个答案:

答案 0 :(得分:3)

我不认为您使用PythonWin显示的示例在VS Code中很容易重现。 win32com本身的快速入门指南(下面引用)说,它只能通过COM浏览器或产品文档(在本例中为Word)。后者不太可能,因此PythonWin可能正在使用COM浏览器来查找属性。由于PythonWinwin32com属于同一个包,因此PythonWin内置COM浏览器并非不太可能。

  

我如何知道哪些方法和属性可用?

     

好问题。这很难!您需要使用文档   产品,或可能是COM浏览器。但请注意COM浏览器   通常依赖于这些对象在某些情况下注册自己   方式,许多对象不这样做。你只是希望知道。

如果你想从VS Code plugin获得相同的功能,则必须在Jedi(VS Code插件的智能感知)中实现COM浏览器。

修改:我找到了this建议,关于如何找到这些隐藏属性的自动完成功能:

  

这些包装器会做各种使静态分析变得困难的事情,   除非我们特殊情况他们。这样的一般解决方案   case是运行到断点并在实时运行时状态下工作。   然后,自动完成符应包括完整的符号列表   因为它会检查运行时。

对话来自python IDE wingwide的邮件列表。 Here你可以看到,他们实施了上述方法:

Auto-Completer Icons

答案 1 :(得分:2)

评分

我已经在VSCode中确认了您的问题,尽管IntelliSense可能正常工作。注意Ctrl + Space会调用预定义变量的建议:

enter image description here

但是,默认情况下,win32com.client似乎没有可用的公共属性。这可能就是IntelliSense似乎不起作用的原因。

测试

拥有{3.6}的Python {3}},我在Jupyter笔记本,IPython控制台和本机Python REPL中确认了以下代码:

import win32com.client


app = win32com.client.Dispatch("Word.Application")
len(dir(app))
# 55
[x for x in dir(app) if not x.startswith("_")]
# []

此隐藏属性问题为installed win32com。请在其他环境/ IDE中确认此测试。可能是您的环境或特定版本的PythonWin在全局命名空间中预加载某些变量。

参考

答案 2 :(得分:0)

我认为您的问题与定义Python interpreter

有关

通过按{strong> python interpreter VS Code f1命令面板中执行ctrl+shift+p命令,选择合适的Python解释器键。