2012-11-15 2 views
1
내가 965465464.19234 같은 몇 가지 수를 반환

파이썬 파일 수정 시간 및 소켓

os.path.getmtime('path') 

를 사용하여 파일의 수정 시간을 얻을 일부 코드를 작성했습니다

위에 설정하세요. 바이트로 변환하고 소켓을 통해 보내십시오. 다른 쪽 끝에서 나는 소켓을 읽고 사용하여 다른 파일이 타임 스탬프를 설정하려고 :

os.utime('path',(access_time, modified_time)) 

나는 내가 modified_time 소켓에서 수신 설정하려고하면서 access_time이 동일하게 유지 보장합니다. 그러나 utime은 정수를 예상하므로 숫자를 자릅니다 (예 : 965465464). 그러면 문제가 해결됩니다.

나는 잘라내서 어떤 것을 잃어 버릴 수 있습니까? 어떻게 더 좋게 만들 수 있습니까?

답변

3

을 float 또는 정수입니다. 아래 코드가 작동합니다. 나는 모든 것을 다했으나 전선으로 보내.

import os 
from datetime import datetime 
from calendar import timegm 
import sys 
st_info = os.stat('foo.py') 
st_info.st_atime #acces time 
st_info.st_mtime #modified time 
mtime = st_info.st_mtime 
atime = st_info.st_atime 
# send over the wire 
os.utime('foo.py', (atime, mtime)) 

os.utime에서 알 수 있듯이 float를 사용하면 문제가 없습니다.

mtime에

출력 [15] : 1322517342.0에서

[16] : 유형 (mtime에)

출력 [16]에서 변환하기 위해,

+0

작은 역시 부동 파이썬 3, 소켓을 통해 보내려면 바이트로 변환 한 다음 바이트에서 의도 한대로 다시 변환해야합니다. 권리? 그래서 int와 float의 문제는 튀어 나오지 않을까요? 답장을 보내 주셔서 감사합니다.당신의 도움을 이해하십시오 – Romaan

+0

문서는 명시 적으로 다음과 같이 말합니다 : * "정확한 타임 스탬프가 필요한 경우에는 항상 st_atime_ns, st_mtime_ns 및 st_ctime_ns"*를 사용해야합니다. OP가 정확한 타임 스탬프를 원한다는 것을 이해하므로 integer * * _ns 속성을 사용해야합니다. – jfs

2

getmtime()st_mtime을 반환합니다. the docs에서 :

참고 : 정확한 의미와 st_atime, st_mtime의 해상도, st_ctime 속성 운영 체제 및 파일 시스템에 따라 달라집니다. 예를 들어 FAT 또는 FAT32 파일 시스템을 사용하는 Windows 시스템에서 st_mtime은 2 초의 해상도를 가지며 st_atime은 1 일의 해상도 만 사용합니다. 자세한 내용은 운영 체제 설명서를 참조하십시오. 마찬가지로 st_atime_ns, st_mtime_ns 및 st_ctime_ns는 항상이지만 나노초 단위로 표시됩니다. 많은 시스템에서는 나노초 정밀도를 제공하지 않습니다. 나노초 정밀도를 제공하는 시스템에서 st_atime, st_mtime 및 st_ctime을 저장하는 데 사용되는 부동 소수점 객체는이 값을 모두 유지할 수 없으므로 약간 정확하지 않습니다. 은 정확하지 않습니다. 정확한 타임 스탬프가 필요한 경우 항상 st_atime_ns, st_mtime_ns 및 st_ctime_ns를 사용해야합니다.

내를 강조

당신은 os.utime()os.stat()에서 정수 나노초를 전달하는 ns 매개 변수를 사용할 수

: 나는 문제가 modified_time과 관련이있다 생각하지 않습니다

os.utime(path, ns=(access_time_ns, modified_time_ns))