Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 远程连接上的VBA外壳_Python_Excel_Vba_Powershell_Shell - Fatal编程技术网

Python 远程连接上的VBA外壳

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

如果我在本地计算机上的C驱动器上运行该代码,则该代码可以工作。但是,如果我尝试在远程机器上的一个会话中从电子表格运行它,在该会话中我登录到了同一个远程机器,那么什么都不会发生。它本身并没有崩溃,只是没有产生任何东西

...
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就是这样。先更改了驱动器,现在可以正常工作了。如果你想将此作为答案发布,我会选中它。