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

问题描述 投票:9回答:3

我安装了Python Extensions for Windows。在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。

python visual-studio-code win32com jedi
3个回答
3
投票

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

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

好问题。这很难!您需要将文档与产品一起使用,或者可能需要使用COM浏览器。但请注意,COM浏览器通常依赖于这些对象以某种方式注册自己,而许多对象则不这样做。你只是想知道。

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

编辑:我发现this建议,关于如何找到这些隐藏属性的自动完成,可以完成:

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

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

Auto-Completer Icons


2
投票

评论

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

enter image description here

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

测试

有了Python 3.6的installed win32com,我在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("_")]
# []

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

参考


0
投票

我认为你的问题与定义Python interpreter有关。

通过按python interpreterVS Code键在f1命令调色板中执行ctrl+shift+p命令,选择合适的Python解释器。

© www.soinside.com 2019 - 2024. All rights reserved.