psexec安装在system32目录中,并且在Windows CMD行或powershell能够在另一台服务器上执行远程bat文件(该服务器依次执行SSIS包并且数据被验证为已加载)。
我正在尝试将其构建为本地执行的python脚本,但是当我在python shell中运行以下行时,会打开CMD窗口并且看起来像经典的'psexec不是出现一个识别的内部或外部命令'错误(但CMD窗口关闭得太快,我不是100%)。
以下在python中执行失败: 进口口 os.system(r“psexec.exe \ servername \ d:\ gis \ gis_data \ gps \ gps_data_sql \ importgpsdata.bat”)
以下在Windows CM行中成功执行: psexec.exe \ servername \ d:\ gis \ gis_data \ gps \ gps_data_sql \ importgpsdata.bat
d:\等。是要执行的远程蝙蝠的位置。
对于简单的bat执行,我认为不需要subproccess。我也试图提供psexec.exe的显式位置,但也没有运气。
我不知道为什么psexec会在命令行执行得很好但不会在python shell中执行。
答案 0 :(得分:1)
我希望这是file system redirector所致。对于64位系统上的32位进程,它会将对system32
的引用重定向到SysWOW64
。
你有一个64位系统,并运行32位Python。当您从psexec
调用cmd.exe
时,它会找到psexec
,因为cmd.exe
是64位进程,因此无需重定向。同样适用于PowerShell。但是你的32位Python无法进入64位系统目录。所以它找不到psexec
。
您还尝试执行C:\Windows\system32\psexec
并以同样的方式失败。出于完全相同的原因。重定向器意味着该路径实际上引用C:\Windows\SysWOW64\psexec
到32位进程。
通过调用C:\Windows\Sysnative\Psexe.exe
来测试这个假设。这应该来自你的32位Python,因为它使用Sysnative
别名,允许32位进程进入64位系统目录。
任何长期解决方案都应该将psexec
放在其他地方。请记住,系统目录属于系统,您不应该修改其内容。我建议您为此类实用程序创建一个专用文件夹,并将该目录添加到PATH
。