2013-04-30 50 views
1

psexec安装在system32目录中,并在Windows CMD行或powershell能够在另一个服务器上执行远程bat文件(它依次执行SSIS包和数据被验证为已加载)。psexec在本地命令行执行远程蝙蝠,但不在python shell中

我试图打造成为本地执行的Python脚本这一点,但是当我运行在Python以下行外壳被打开CMD窗口,看起来什么经典“PSEXEC是无法识别的内部或外部命令“错误出现(但CMD窗口关闭得非常快,我不是100%)。

以下是在Python执行失败: 进口OS 使用os.system(R “psexec.exe \服务器\ 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:\ etc。成为要执行的远程蝙蝠的位置。

对于简单的蝙蝠执行,我不认为子进程是必需的。我也试图提供没有运气的psexec.exe的明确位置。

我只是不知所措,为什么psexec将在命令行而不是在python shell中执行得很好。

+0

确实,使用子进程不会改变任何东西,但我仍然建议你这样做。这太好了。 – 2013-04-30 13:03:49

+0

我一直在努力保持简单的工作流程,并且可能会采用子进程。我不确定我能否将python变量传递到命令行执行中,这对于我的最终工作流程来说最终是至关重要的。我的GIS服务器接收GPS数据的文本上传,并将其传递到已知位置,覆盖已退出的文件。蝙蝠使用文本文件作为输入,针对SSIS包运行dtexec。精细和华丽,直到一次运行多个进程。 50个用户,但它会发生。所以,如果能够通过唯一的文本文件名... – Clickinaway 2013-04-30 13:16:23

回答

1

我预计这是由于file system redirector。对于64位系统上的32位进程,将会将引用重定向至system32SysWOW64

你有一个64位系统,并且正在运行32位Python。当你从cmd.exe调用psexec它发现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开始工作,因为它使用允许32位进程看到64位系统目录的Sysnative别名。

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

+0

大卫Heffernan目前统治我的世界。我从来没有能够嗅出这一点。现在,我需要将这一切转化为我的arcgis地理处理服务,并且我有一个现场的GPS上传工具包。 – Clickinaway 2013-04-30 13:12:05

+0

非常感谢。这是一旦你看过几次就立即明白的事情之一,如果你从未有过的话,就不可能找出答案! – 2013-04-30 13:17:20