psexec在本地命令行执行远程bat,但在python shell中不执行

时间:2013-04-30 12:39:53

标签: python windows

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中执行。

1 个答案:

答案 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