python远程复制目录和读取文本文件

时间:2015-04-17 16:30:40

标签: python windows file wmi remote-access

我即将开始处理一个项目,在该项目中,Python脚本可以远程访问Windows Server并读取某个目录中的一堆文本文件。我计划使用一个名为WMI的模块,因为这是我能够使用Python成功远程访问Windows服务器的唯一方法。但是经过进一步的研究,我不确定我是否会使用这个模块。

唯一的问题是,这些文本文件每2秒不断更新一次,如果遇到MutEx错误,尝试打开文件,我担心脚本会崩溃它正在被重写。我唯一能想到的是创建一个新目录,将所有文件(通过脚本)复制到它们所处的状态并从那里读取它们;并且一旦完成检查所有旧的那些,就会不断地用新的覆盖这些。不幸的是,我不知道如何正确或有效地执行此操作。

我该怎么做呢?哪个python模块最适合执行?

2 个答案:

答案 0 :(得分:0)

之前我已经完成了WMI的一些工作(虽然不是来自Python),我不会尝试将它用于这样的项目。正如你所说,WMI往往模糊不清,而我的经验表明这些事情很难长期支持。

我要么在Windows API级别工作,要么根据需要设计一个执行所需操作的服务来访问此服务。当然,您需要在需要控制的每台计算机上安装此服务。这两种方法都有其优点。 WinAPI方法几乎可以保证您不会发明任何新的安全漏洞并且最初更简单。服务方法应该使应用程序更快,并且需要更少的网络流量。我相信你可以很容易地想到别人。

无论采用何种方法,您仍需拥有必要的权限,网络端口等。例如,WMI通常被防火墙阻止,你仍然可以作为一些NT进程运行。

对不起,这不是一个真正的答案 - 意思是长篇评论。

ADDED

Re:API编程,虽然您没有Windows API经验,但我希望您发现它对您描述的任务很熟悉,即读取和写入文件,扫描目录对Windows来说并不是唯一的。您只需要了解您感兴趣的API部分。

一旦你创建了适当的安全上下文并开始你的客户端进程,就没有任何面向服务的了,即你可以简单地打开和关闭文件等,而忽略了文件是远程的事实,而不是服务器名称包含在文件/文件夹位置的UNC名称中。

答案 1 :(得分:0)

最近在Ansible中有Windows支持。它使用winrm。有很多Python库使用winrm,只是google它,但Ansible非常通用。

http://docs.ansible.com/intro_windows.html

https://msdn.microsoft.com/en-us/library/aa384426%28v=vs.85%29.aspx