我正在尝试使用 python 获取文件的准确(使用 ms 分辨率)创建日期。
在 Window 上获取准确创建日期的方法是使用 wmic . 所以我准备了一个简单的 shell 命令来读取创建日期:
wmic datafile where name="C:\\Users\\Public\\test.txt" get creationdate | findstr /brc:[0-9]
在 Win10 上通过 CMD shell 运行正常(如果文件存在) 然后我尝试使用子进程从 python 运行相同的命令:
import subprocess
from subprocess import check_output, STDOUT, CalledProcessError
cmd = 'wmic datafile where name="C:\\Users\\Public\\test.txt" get creationdate | findstr /brc:[0-9]'
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
print( "program output:", out)
try:
o = check_output(cmd, stderr=STDOUT, shell=True)
returncode = 0
except CalledProcessError as ex:
o = ex.output
returncode = ex.returncode
if returncode != 1: # some other error happened
raise
finally:
print(o)
但是我得到了同样的错误信息:
Node - username ERROR: Description = Invalid query
关于如何获取有关修复错误的更多信息,您有什么建议吗?
最佳答案
import subprocess
from subprocess import check_output, STDOUT, CalledProcessError
cmd = 'wmic datafile where name="C:\\\\Users\\\\Public\\\\test.txt" get creationdate | findstr /brc:[0-9]'
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
print( "program output:", out.decode().rstrip())
out.decode().rstrip()
返回一个字符串,类似于'20210113222350.636280+060'
.
解释:
- 转义所有
\
Windows 路径中的 (Reverse Solidus)。 - 检查返回值类型:
type(out)
==><class 'bytes'>
;将其解码为字符串。 - 使用
rstrip()
方法去除所有尾随空格.
备注:import os; os.path.getctime("C:\\Users\\Public\\test.txt")
返回一个 float 值 1610573030.6362805
这是一种纪元时间格式,恕我直言 (GMT Wednesday, 13 January 2021 21:23:50.636
)。
关于python - 在 Windows 10 上从 Python 获取准确的文件创建日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67607136/