【问题标题】:Get last modified date of windows remote file获取Windows远程文件的最后修改日期
【发布时间】:2017-05-01 14:07:16
【问题描述】:
import sys, os, datetime, time, urllib
from subprocess import *

List_SP_Servers=["toto1","toto2","toto3"]
ListTraceFile_SP_Servers=["c:\\\\dic1\\\\udic1\\\\file1.txt","c:\\\\dic1\\\\udic1\\\\file2.txt"]

for l__sp in List_SP_Servers:
    try:
        print '\n--------'+str(l__sp)+'--------'
        for l__traces in ListTraceFile_SP_Servers:
            #l__cmd1 = '['+'\"psexec\",\"\\\\'+l__sp+'\",'+'\"-nobanner\"'+',\"ls\",\"-al\"'+',"'+l__traces+'\"'+']'
            #l__cmd1 = '(['+'\"psexec\",\"\\\\'+l__sp+'\",'+'\"-nobanner\"'+',\"ls\",\"-al\"'+',"'+l__traces+'\"'+'],shell=True,stdout=PIPE).communicate()[0]'
            #print l__cmd1
            #output1=popen(l__cmd1,shell=True,stdout=PIPE).communicate()[0]
            #l__cmd1 = "[\"C:\\Tools\\Sysinternalsuite\\psexec\",\"\\\\\\"%s"\",\"-nobanner\",\"ls\",\"-al\","%s"\"]" % (l__sp,l__traces)
            #print 'La vies est -->'+l__cmd1
            #l__cmd1_WithCall = "\'psexec\",\"\\\\\\"%s"\",\"-nobanner\",\"ls\",\"-al\" "%s"\'" % (l__sp,l__traces)
            l__cmd1_WithCall = "\'psexec \\\%s -nobanner ls -al %s\'" % (l__sp,l__traces)
            #l__cmd1_WithCall = "\"psexec\",\"\\\%s,\"ls\",\"-al\",%s" % (l__sp,l__traces)
            print 'l__cmd1_WithCall-->',l__cmd1_WithCall
            p5=call(l__cmd1_WithCall,shell=True)
            print '---->',p5,'<-----'
    except:
        print '\n'+l__sp+' Can\'t reach it !\n'

当我试图将某些文件的最后修改日期从 Windows 服务器获取到远程 Windows 服务器时,上面的代码给了我错误。 我在 Windows 上使用 psexec 但也许它们是获取此类信息的其他解决方案。

我尝试使用subprocess.call, subprocess.popen, subprocess.check_out 并且都给我错误,但是当我尝试直接在 cmd 上键入命令时它工作正常。

【问题讨论】:

  • 请同时向我们提供错误消息以及它发生在代码 sn-p 的哪一行。另外,您是否考虑过使用 Python 标准库中的os.stat() 或类似工具来检索时间,而不是通过外部工具?
  • 谢谢。这是我的问题。我知道如何在本地获取信息。我的目标是对远程服务器中的文件进行相同的处理。此外,如果您在 l_cmd1 中看到命令,当我在 Windows 命令提示符中键入它时它工作正常,但将它放在 subprocess.popen 中时它不是。你是对的,我相信还有另一种方法不使用外部工具,但是如何?
  • 您还没有向我们展示您遇到的错误。
  • --------toto1-------- l__cmd1_WithCall--> 'psexec \\toto1 -nobanner ls -al c:\\dic1\\udic1\\file1 .txt' ''psexec' 不是内部或外部命令、可运行程序或批处理文件。 ----> 1 'psexec \\toto1 -nobanner ls -al c:\\dic1\\udic1\\file2.txt' ''psexec' 未被识别为内部或外部命令、可运行程序或批处理文件。 ----> 1 'psexec \\toto2 -nobanner ls -al c:\\dic1\\ udic1\\file1.txt' ''psexec' 不是内部或外部命令,可运行的程序
  • @vivideen 这应该进入问题描述(您可以编辑它),因为它是理解问题的重要部分。乍一看,您的引用似乎是错误的 - 您需要删除整个命令行周围的单引号,因为它试图执行名称为 psexec \\toto1 -nobanner ... 的命令等等,而不是命令 psexec 和单独的参数。

标签: python


【解决方案1】:

为了获取文件最后一次在windows中被修改的时间,你可以使用下面的代码

import os,datetime
timestamp = os.stat(PATH_OF_FILE).st_ctime
readable = datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')

首先你得到时间戳并且可读将它转换成日期

【讨论】:

  • 太棒了。但是代码中显示的我的担忧是远程的。这很好用,当你在同一台服务器(本地)时我得到了它,但我希望远程服务器中的文件也一样。
  • @vivadeen 您可以将相关目录作为共享提供。我的意思是你允许更强大的 PsExec,那么有什么反对分享的呢?
  • 如果您只有一或两台远程服务器可供读取,但我有 70 台远程服务器来获取此信息,则可以使用此解决方案。
  • 你可以按照这个问题stackoverflow.com/a/19171820/5306132中的描述挂载网络驱动器
  • 感谢 Stavros Avramidis,这是我使用的好主意。它至少比使用 psexec 工作得更快,也许它们是其他方式并且更快,但至少它正在工作。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2011-10-17
  • 2012-12-06
  • 2019-02-26
  • 2010-09-17
  • 1970-01-01
相关资源
最近更新 更多