Python 如何从Linux机箱通过RPyC调用pywin32
简介: 我有一个装有Python2.7和RPyC的Linux机器。此外,我还安装了一个Windows(Server 2008)box,其中安装了相同的Python版本RPyC和pywin32。Windows box运行RPyC classic_服务器,Linux box用于运行RPyC客户端。通常,我正在构建infra,以便从Linux机箱远程管理Active Directory(AD)服务器。对于AD管理,将使用安装在Windows计算机上的“pyad”模块 问题: 通常,所有这些捆绑包都按照承诺工作Python 如何从Linux机箱通过RPyC调用pywin32,python,linux,windows,rpyc,Python,Linux,Windows,Rpyc,简介: 我有一个装有Python2.7和RPyC的Linux机器。此外,我还安装了一个Windows(Server 2008)box,其中安装了相同的Python版本RPyC和pywin32。Windows box运行RPyC classic_服务器,Linux box用于运行RPyC客户端。通常,我正在构建infra,以便从Linux机箱远程管理Active Directory(AD)服务器。对于AD管理,将使用安装在Windows计算机上的“pyad”模块 问题: 通常,所有这些捆绑包都按照
In [3]: conn = rpyc.classic.connect("10.103.224.44")
In [4]: conn.modules.os.getcwd()
Out[4]: 'C:\\ldap-automation-project\\scripts'
但当我尝试调用远程“pywin32”或“pyad”(pywin32是一个依赖项)时,它失败了
[7]中的:conn.modules.pywin32
---------------------------------------------------------------------------
ImportError回溯(最近一次呼叫最后一次)
在()
---->1 conn.modules.pywin32
/usr/lib/python2.7/site-packages/rpyc/core/service.pyc in_u___getattr____(self,name)
119返回自我。\u缓存[名称]
120 def_uuugetattr_uuu(self,name):
-->121返回自我[姓名]
122
123级奴隶服务(服务):
/usr/lib/python2.7/site-packages/rpyc/core/service.pyc在u_getitem_u__(self,name)中
116 name=“.”。加入(名称)
117如果名称不在self.\u缓存中:
-->118 self.\uuuu缓存[名称]=self.\uuu获取模块(名称)
119返回自我。\u缓存[名称]
120 def_uuugetattr_uuu(self,name):
/usr/lib/python2.7/site-packages/rpyc/core/netref.pyc在调用中(_self,*args,**kwargs)
194定义调用(_self,*args,**kwargs):
195 kwargs=元组(kwargs.items())
-->196返回syncreq(_self,conss.HANDLE,args,kwargs)
197 uuuu调用uuuu.uuuuuu文档uuuuuuu=doc
198回叫__
/syncreq中的usr/lib/python2.7/site-packages/rpyc/core/netref.pyc(代理,处理程序,*args)
69 raise REFERENCERROR('弱引用对象不再存在')
70 oid=object.\uuuuuuuGetAttribute\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
--->71返回conn.sync_请求(处理程序、oid、*args)
72
73 def asyncreq(代理、处理程序、*args):
/同步请求中的usr/lib/python2.7/site-packages/rpyc/core/protocol.pyc(self,handler,*args)
439 isexc,obj=self.\u sync\u replays.pop(seq)
440如果isexc:
-->441升起obj
442其他:
443返回obj
ImportError:没有名为pywin32的模块
=========远程回溯(1)=========
回溯(最近一次呼叫最后一次):
文件“C:\Python27\lib\site packages\rpyc\core\protocol.py”,第305行,在调度请求中
res=self.\u处理程序[handler](self,*args)
文件“C:\Python27\lib\site packages\rpyc\core\protocol.py”,第535行,在\u handle\u调用中
返回self.\u local\u objects[oid](*args,**dict(kwargs))
文件“C:\Python27\lib\site packages\rpyc\core\service.py”,第163行,在exposed\u getmodule中
返回uuu导入(名称,无,无,“*”)
ImportError:没有名为pywin32的模块
有什么想法吗?
win32api
等都是顶级导入。项目名称为PyWin32。感谢@eryksun的回复,但它仍然不起作用。我得到:ImportError:与一些基本的标准模块(如OS:In[11]:conn.modules.OS Out[11]:相比,没有名为win32api的模块:您能在交互式登录中导入win32api吗?是的,我能。当我从本地iPython导入它时,它就像一个符咒一样工作,但远程失败。在本地iPython的情况下,什么是win32api.\uu文件\uu
?在远程情况下,此目录是否在sys.path
中?
In [7]: conn.modules.pywin32
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-7-31ec7f3bb520> in <module>()
----> 1 conn.modules.pywin32
/usr/lib/python2.7/site-packages/rpyc/core/service.pyc in __getattr__(self, name)
119 return self.__cache[name]
120 def __getattr__(self, name):
--> 121 return self[name]
122
123 class SlaveService(Service):
/usr/lib/python2.7/site-packages/rpyc/core/service.pyc in __getitem__(self, name)
116 name = ".".join(name)
117 if name not in self.__cache:
--> 118 self.__cache[name] = self.__getmodule(name)
119 return self.__cache[name]
120 def __getattr__(self, name):
/usr/lib/python2.7/site-packages/rpyc/core/netref.pyc in __call__(_self, *args, **kwargs)
194 def __call__(_self, *args, **kwargs):
195 kwargs = tuple(kwargs.items())
--> 196 return syncreq(_self, consts.HANDLE_CALL, args, kwargs)
197 __call__.__doc__ = doc
198 return __call__
/usr/lib/python2.7/site-packages/rpyc/core/netref.pyc in syncreq(proxy, handler, *args)
69 raise ReferenceError('weakly-referenced object no longer exists')
70 oid = object.__getattribute__(proxy, "____oid__")
---> 71 return conn.sync_request(handler, oid, *args)
72
73 def asyncreq(proxy, handler, *args):
/usr/lib/python2.7/site-packages/rpyc/core/protocol.pyc in sync_request(self, handler, *args)
439 isexc, obj = self._sync_replies.pop(seq)
440 if isexc:
--> 441 raise obj
442 else:
443 return obj
ImportError: No module named pywin32
========= Remote Traceback (1) =========
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\rpyc\core\protocol.py", line 305, in _dispatch_request
res = self._HANDLERS[handler](self, *args)
File "C:\Python27\lib\site-packages\rpyc\core\protocol.py", line 535, in _handle_call
return self._local_objects[oid](*args, **dict(kwargs))
File "C:\Python27\lib\site-packages\rpyc\core\service.py", line 163, in exposed_getmodule
return __import__(name, None, None, "*")
ImportError: No module named pywin32