Я запускаю несколько тестовых сценариев на удаленном компьютере с Linux, используя свой локальный ноутбук с Windows. Обе машины подключены к маршрутизатору и могут подключаться друг к другу через Ethernet.
Я могу прочитать системное время Linux, подключившись к системе Linux по SSH и выполнив команду date. Я конвертирую возвращаемую строку из такой команды в объект datetime python.
Используя такой объект datetime, я пытаюсь установить время на локальном хосте Windows с помощью win32api.SetSystemTime ().
Кажется, все работает нормально, но время в окнах обновляется неправильно (часы). Я предполагаю, что это связано с часовым поясом, но я не знаю, как правильно передать информацию в wni32api.SetSystemTime (), чтобы исправить это.
Когда в удаленном Linux время 18.08, в Windows оно установлено как 11.08.
Вот мой код: ~~~~~~~~~~~~~~~~~~~~~~
import sys
from datetime import datetime
import paramiko
import win32api
hostComputerTime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print ('The host laptop current date and time is - ', hostComputerTime)
HOST = "192.168.1.2"
PORT = 22
uname = 'root'
pwd = 'mypassword'
def getCyclerTime (host):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect (host, username = uname, password = pwd)
stdin, stdout, stderr = ssh.exec_command("date")
output = stdout.readlines()
print ("\n The command response on the host was - ", output)
return output [0]
except paramiko.SSHException:
print ("Trouble in making SSH connection")
ssh.close()
#Get the Cycler time
timeToSet = getCyclerTime (host = HOST)
print ("\n String value of the time from Cycler - ",timeToSet)
# Convert the date string from Cycler to datetime object
laptopTimetoSet = datetime.strptime (timeToSet, '%a %b %d %H:%M:%S %Z %Y\n')
print ("\n The converted date object is - ", laptopTimetoSet)
time = (laptopTimetoSet.year,
laptopTimetoSet.month,
laptopTimetoSet.isoweekday(),
laptopTimetoSet.day,
laptopTimetoSet.hour,
laptopTimetoSet.minute,
laptopTimetoSet.second,
0,
)
#Now set the laptop time
win32api.SetSystemTime (laptopTimetoSet.year,
laptopTimetoSet.month,
laptopTimetoSet.isoweekday(),
laptopTimetoSet.day,
laptopTimetoSet.hour,
laptopTimetoSet.minute,
laptopTimetoSet.second,
(laptopTimetoSet.microsecond)
)
Вам лучше настроить NTP. Шутки в сторону.
удаленная машина доступна только мне, а не под моим контролем. Не могу использовать NTP.
Любые эксперты по datetime или win32api, пожалуйста, поделитесь своими ценными мыслями.
Исправление состоит в том, чтобы добавить соответствующее смещение часового пояса от GMT к параметру часа. laptopTimetoSet.hour + 7 работал у меня, потому что я нахожусь на PST. Хотелось бы, чтобы у win32Api.SetSystemTime () был параметр часового пояса, который мы могли бы передать.
C: \ Users \ lilliput \ Desktop \ Volume Accuracy Automation> python getHostTime.py Текущая дата и время хост-ноутбука - 2018-09-12 11:08:53 Команда для установки - date -s '2018-09-12 11:08:53 'Ответ на команду на хосте был - [' Ср, 12 сентября 18:08:54 UTC 2018 \ n '] Строковое значение времени от Cycler - Ср 12 сентября 18:08:54 UTC 2018 Преобразованный объект даты - 2018-09-12 18:08:54 дата время сейчас - 2018-09-12 11: 08: 54.204792 дата время UTC - 2018-09-12 18: 08: 54.205791