我安装了Python Extensions for Windows。在PythonWin IDE中,我可以在Automation对象上获得自动完成功能(特别是使用win32com.client.Dispatch
创建的对象):
如何在VS Code中获得相同的自动完成功能?
我正在使用Microsoft Python extension。
Python Windows Extensions有一个名为COM Makepy的工具,它显然生成了Automation对象的Python表示,但我无法弄清楚如何使用它。
更新
显然,Microsoft Python扩展使用Jedi进行自动完成。
我已经在Github的扩展项目上提交了issue。
请注意,我通常在Python中使用Intellisense;它只是我缺少的自动化对象上的Intellisense。
我不认为您在PythonWin
中显示的示例在VS Code中很容易重现。 win32com
本身的快速入门指南(下面引用)说,它只能用COM浏览器或产品文档(在这种情况下为Word)。后者不太可能,所以PythonWin
可能正在使用COM浏览器来查找属性。而且因为PythonWin
和win32com
来自同一个软件包,所以PythonWin
内置的COM浏览器并非不太可能。
我如何知道哪些方法和属性可用?
好问题。这很难!您需要将文档与产品一起使用,或者可能需要使用COM浏览器。但请注意,COM浏览器通常依赖于这些对象以某种方式注册自己,而许多对象则不这样做。你只是想知道。
如果你想从VS Code plugin获得相同的功能,则必须在Jedi(VS Code插件的智能感知)中实现COM浏览器。
编辑:我发现this建议,关于如何找到这些隐藏属性的自动完成,可以完成:
这些包装器会做各种使静态分析变得困难的事情,除非我们特别注意它们。这种情况的一般解决方案是运行到断点并在实时运行时状态下工作。然后,自动完成程序应包含完整的符号列表,因为它会检查运行时。
评论
我已经在VSCode中确认了您的问题,尽管IntelliSense可能正常工作。注意Ctrl + Space会调用预定义变量的建议:
但是,默认情况下,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预加载全局命名空间中的某些变量。
参考
我认为你的问题与定义Python interpreter
有关。
通过按python interpreter
或VS Code
键在f1
命令调色板中执行ctrl+shift+p
命令,选择合适的Python解释器。