Установка даты / времени на Unix-сервере с Python (модуль Paramiko) - PullRequest
2 голосов
/ 01 ноября 2011

Хорошо, кто-нибудь может сказать, что я делаю не так с этим простым запросом на изменение времени?Я на машине с win 7, пытаюсь изменить время на linux box.Я могу войти в систему, искать в журналах и запускать другие команды, конечно же, корректируя свой код ниже.Но эта простая команда не меняет дату / время.Я должен что-то упускать из виду?

datetime_string = raw_input("Enter date and time in format 11/1/2011 1600")    

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(iP_address, username='root', password='******')
apath = '/'
apattern = datetime_string
rawcommand = 'date -s' + datetime_string
command1 = rawcommand.format(pattern=apattern)
stdin, stdout, stderr = ssh.exec_command(command1)
dateresult = stdout.read().splitlines()

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Вы должны подтвердить ввод пользователя. Особенно, если это может быть передано без экранирования в оболочку.

#!/usr/bin/env python
from datetime import datetime

import paramiko

# read new date from stdin
datetime_format = "%m/%d/%Y %H%M"
newdate_string = raw_input("Enter date and time in format 11/1/2011 1600")    

# validate that newdate string is in datetime_format
newdate = datetime.strptime(newdate_string, datetime_format)

# print date (change it to `-s` to set the date)
command = "date -d '%s'" % newdate.strftime(datetime_format)

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("localhost") # use ssh keys to authenticate
# run it
stdin, stdout, stderr = ssh.exec_command(command)
stdin.close()

# get output of the command
print
print "stdout: %r" % (stdout.read(),)
print '*'*79
print "stderr: %r" % (stderr.read(),)

выход

$ echo 1/11/2011 1600 | python set-date.py 
Enter date and time in format 11/1/2011 1600
stdout: 'Tue Jan 11 16:00:00 EST 2011\n'
*******************************************************************************
stderr: ''
1 голос
/ 01 ноября 2011

Попробуйте изменить это:

rawcommand = 'date -s' + datetime_string

К этому:

rawcommand = 'date -s "%s"' % datetime_string

И я не уверен, но я не думаю, что rawcommand.format(pattern=apattern) необходимо:

datetime_string = raw_input("Enter date and time in format 11/1/2011 1600")
command1 = 'date -s "%s"' % datetime_string
stdin, stdout, stderr = ssh.exec_command(command1)
dateresult = stdout.read().splitlines()
...