1

psexec 安装在 system32 目录中,并且在 windows CMD 行或 powershell 能够在另一台服务器上执行远程 bat 文件(依次执行 SSIS 包并验证数据是否已加载)。

我正在尝试将其构建到本地执行的 python 脚本中,但是当我在 python shell 中运行以下行时,会打开一个 CMD 窗口,并且看起来像经典的“psexec 不是可识别的内部或外部命令”错误出现(但 CMD 窗口关闭得如此之快,以至于我不是 100%)。

以下在python中执行失败: import os 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 执行,我认为不需要子进程。我也尝试过提供 psexec.exe 的显式位置,但也没有运气。

我只是不知道为什么 psexec 会在命令行中执行得很好,但在 python shell 中却没有。

4

1 回答 1

1

我希望这是由于文件系统重定向器。对于 64 位系统上的 32 位进程,这会将引用重定向system32SysWOW64.

您有一个 64 位系统,并且正在运行 32 位 Python。当您psexec从中调用时,cmd.exe会发现psexec因为cmd.exe是 64 位进程,因此不受重定向的影响。对于 PowerShell 也是如此。但是您的 32 位 Python 无法查看 64 位系统目录。所以它找不到psexec

您还尝试执行C:\Windows\system32\psexec,但以同样的方式失败。出于完全相同的原因。重定向器意味着路径实际指向的 32 位进程C:\Windows\SysWOW64\psexec

通过调用 来检验这个假设C:\Windows\Sysnative\Psexe.exe。这应该适用于您的 32 位 Python,因为它使用Sysnative允许 32 位进程查看 64 位系统目录的别名。

任何长期解决方案都应该涉及psexec到其他地方。请记住,系统目录属于系统,您不应修改其内容。我建议您为此类实用程序创建一个专用文件夹,并将该目录添加到您的PATH.

于 2013-04-30T12:45:06.000 回答