Python 远程连接上的VBA外壳
如果我在本地计算机上的C驱动器上运行该代码,则该代码可以工作。但是,如果我尝试在远程机器上的一个会话中从电子表格运行它,在该会话中我登录到了同一个远程机器,那么什么都不会发生。它本身并没有崩溃,只是没有产生任何东西Python 远程连接上的VBA外壳,python,excel,vba,powershell,shell,Python,Excel,Vba,Powershell,Shell,如果我在本地计算机上的C驱动器上运行该代码,则该代码可以工作。但是,如果我尝试在远程机器上的一个会话中从电子表格运行它,在该会话中我登录到了同一个远程机器,那么什么都不会发生。它本身并没有崩溃,只是没有产生任何东西 ... Call RunCmd("python37 get_eff_req_data.py HPBoiler_RunMgr_v00.txt") ... Sub RunCmd(cmd) Dim wsh As Object Set wsh = VBA
...
Call RunCmd("python37 get_eff_req_data.py HPBoiler_RunMgr_v00.txt")
...
Sub RunCmd(cmd)
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
ChDir ThisWorkbook.Path
Call wsh.Run(cmd, windowStyle)
End Sub
如果我在电子表格目录下的远程计算机上的PowerShell窗口中运行该命令行,它就可以正常工作。可能是因为包含此宏的电子表格位于D驱动器上,而Python位于远程计算机的C驱动器上?但为什么它在Powershell中运行良好?我会说,当VBA宏试图运行shell时,它会打开常规的DOS命令提示符,而不是Powershell,当我自己打开命令提示符时,它会转到另一个驱动器,H驱动器。我无法从命令提示符进入D驱动器,但我已确认Python将在H上运行。
ChDir ThisWorkbook.Path
仅当当前目录与您尝试设置的路径位于同一驱动器上时,此选项才有效。如果它位于不同的驱动器上,则首先需要调用ChDrive
来设置正确的驱动器
您假设
get\u eff\u req\u data.py
和HPBoiler\u RunMgr\u v00.txt
在当前目录中,不管是什么目录。你怎么知道的?您可能需要使用Dir()
函数来确保这些文件确实存在。您确定另一台计算机已安装Python,并且其目录位于路径中吗?仅供参考,ChDir thish工作簿。只有当前目录与您尝试设置的路径位于同一驱动器上时,路径才能工作。如果它位于不同的驱动器上,则首先需要调用ChDrive
来设置正确的驱动器@蒂姆·罗伯茨,谢谢。是的,我肯定它们在当前目录中。我把它们放在那里,在那里看到它们。我还确信Python是有效的,因为如果我在该目录下的Powershell中运行相同的命令,该命令将按预期运行。@TimWilliams就是这样。先更改了驱动器,现在可以正常工作了。如果你想将此作为答案发布,我会选中它。