Latest posts on Как изменить системное время? topichttp://python.su/forum/topic/39025/2020-05-28T02:19:35+03:00Общий :: Python для новичков :: Как изменить системное время?
2020-05-28T02:19:35+03:00py.user.next210219<blockquote><em>Forrest</em><br/>Информация про книжки будет полезна.(про разветвление)</blockquote>Информация по структурному программированию<br/><a href="https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">wiki. структурное программирование</a><br/>Введение для школьников по структурному программированию<br/><a href="https://studref.com/320295/informatika/strukturnoe_programmirovanie">https://studref.com/320295/informatika/strukturnoe_programmirovanie</a><br/>Книга по структурному программированию<br/>Программирование для математиков. Автор. Кушниренко А.Г. Лебедев Г.В. <br/><br/>Книга по питону<br/><a href="https://diveintopython3.net/">https://diveintopython3.net/</a><br/>на русском<br/><a href="https://pep8.ru/doc/dive-into-python-3/">https://pep8.ru/doc/dive-into-python-3/</a><br/><br/><blockquote><em>Forrest</em><br/>Я делал так, задача, гугл, копипаст, работает для меня, адаптирую … следующая задача.</blockquote>А надо так: 1) находишь материалы; читаешь теорию; выполняешь сотни практических упражнений; пробуешь реальную программу написать; отмечаешь, что можешь сделать и что не можешь сделать; 2) переходишь к пункту 1.<br/>Так у тебя будут послойно формироваться навыки, необходимые для создания программы.<br/><br/>В данном случае ты на личном примере убедился, что навык гуглинга и копипаста срабатывает, но не подходит. Задача простая, а решить ты её не можешь. Что же говорить о непростых задачах? Практически все программы, которые нужны для дела (то есть могут делать что-то ощутимое), представляют из себя конгломераты из простых программ.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T20:33:25+03:00Forrest210211<strong>py.user.next</strong><br/><blockquote><em>py.user.next</em><br/>с тётеньками бухгалтершами, так как им можно рассказать, что у тебя потрясающая программа в стиле Нью-Васюков</blockquote>Я как бы ничего не продаю, мне все равно мне верят или нет.<br/><blockquote><em>py.user.next</em><br/>в любой книжке не для самых маленьких, но читать ты книжки не привык, </blockquote>Информация про книжки будет полезна.(про разветвление)<br/>Я делал так, задача, гугл, копипаст, работает для меня, адаптирую … следующая задача.<br/>
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T17:34:27+03:00Rafik210206Всё-таки <strong>py.user.next</strong> прав насчёт реализации этой задачи на shell. Что на бунту, что на минте, что на арче, везде есть оболочка bash и/или sh. Правильно сделанный скрипт на shell будет наиболее оптимальным решением..<br/>
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T16:43:53+03:00py.user.next210202<blockquote><em>Forrest</em><br/>мой робот несколько лет работал на вебмани- бирже, размещал ордера, перемещал ордера, считал деньги</blockquote>Эти рассказы хорошо работают с тётеньками бухгалтершами, так как им можно рассказать, что у тебя потрясающая программа в стиле Нью-Васюков, которая бороздит просторы космоса. Они ничего в этом не смыслят, поэтому и проверить не могут. Но для программиста твой код - как открытая книга. Из него сразу видно, что ты знаешь, а о чём даже представления не имеешь.<br/><br/><blockquote><em>Forrest</em><br/>Больше конкретики (ссылок, кода), если хотели помочь.</blockquote>Ну, я вижу, что у тебя даже архитектура никакая, питон тут никаким боком. Ты собрался запускать один и тот же код на частично или вообще полностью различающихся системах. Естественно, если на одной он запустится, то на другой, отличной от первой, он сломается, и наоборот, если ты его поправишь для второй системы, тогда он сломается на первой.<br/>Поэтому я тебе и посоветовал разветвить запуск. Это и есть помощь, потому что сам бы ты не додумался до этого. То же самое ты нашёл бы в любой книжке не для самых маленьких, но читать ты книжки не привык, а привык типа чтобы всё само собой из космоса в голове появлялось или же чтобы кто-то уже готовое тебе давал, а ты только соединял это в исходном файле и запускал его. А потом бы ещё говорил приблизительно такое “это моя программа, которую я сам написал, и она считает деньги, так что знайте, какой я молодец”.<br/>Так что код придётся тебе самому писать.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T15:41:54+03:00Forrest210198Знаний мало потому пишу в разделе для новичков. Амбиций много потому мой робот несколько лет работал на вебмани- бирже, размещал ордера, перемещал ордера, считал деньги. Сейчас новый проэкт для себя делаю. Не спешно, в рамках разумной достаточности, все получится. <br/>Больше конкретики (ссылок, кода), если хотели помочь.<br/>Спасибо.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T10:35:42+03:00py.user.next210193<blockquote><em>Forrest</em><br/>Версия Pycharm имеет значение.</blockquote>PyCharm для питона вообще не нужна. Это среда для разработчиков, чтобы удобнее было разрабатывать программы на питоне. К работе питона в операционной системе она отношения не имеет.<br/><br/><blockquote><em>Forrest</em><br/>А мне надо чтоб как в облаке, тут поработал переехал в другое место тоже работает под другой ОС. </blockquote>Для этого нужен разветвитель. Ты запускаешь разветвитель и он определяет, в какой системе он запущен. Определив это, он запускает соответствующий скрипт, который гарантированно сработает в этой системе. Если же система не определена и для неё нет скрипта, то разветвитель просто сообщает об этом и завершает работу. В таком случае ты дописываешь скрипт для такой системы тоже и добавляешь его к остальному набору скриптов. После этого разветвитель может запускать правильный скрипт и для этой системы тоже. Если же ты на винде пытаешься запускать, то там вообще всё своё делается - разветвитель для винды, который выбирает скрипты для разных винд (они тоже бывает различаются сильно по путям и прочим вещам).<br/><br/><blockquote><em>Forrest</em><br/>Я знаю, что я не знаю, но что?</blockquote>Ты не знаешь, что хороший сисадмин программистом не становится автоматом, даже средним. Это две непересекающися области, в каждой из которых свои тонны теории.<br/><br/><a href="https://python.su/forum/post/210171/">Здесь</a> код уровня 9-классника средней школы. А задача стоит сисадминская, хотя бы ПТУ (техникум, колледж) надо закончить. Поэтому ты и не можешь сделать её. То есть сунулся в программирование, не имея знаний для этого. При этом как сисадмин тоже не понимаешь процесс - не знаешь про права, архитектуру ОС, роли программ в ОС.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T10:12:56+03:00Forrest210192Я знаю, что я не знаю, но что? Версия Pycharm имеет значение. Поставил 2018 все пошло. Что не так? Возможно PATH и тут я тоже не очень понимаю. <br/>P.S. Тот случай когда успех не успех, а вопрос.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T09:49:57+03:00Forrest210189<strong>py.user.next</strong><br/>Да, пробовал на разных версиях Pycharm (18-работает, на 20-й нет) и ОС Ubuntu вс ОК, а Linux Mint 19 -нет. А мне надо чтоб как в облаке, тут поработал переехал в другое место тоже работает под другой ОС. Пока все печально. Попробую версию Pycharm.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T08:00:08+03:00py.user.next210187<blockquote><em>Forrest</em><br/>все должно работать в вечном цикле</blockquote>В консоли набери<br/><div class="code"><pre> <span class="nv">i</span><span class="o">=</span><span class="m">0</span><span class="p">;</span> <span class="k">while</span> true<span class="p">;</span> <span class="k">do</span> <span class="nb">echo</span> <span class="s2">"number #</span><span class="k">$((</span><span class="o">++</span>i<span class="k">))</span><span class="s2">"</span><span class="p">;</span> sleep <span class="m">1</span><span class="p">;</span> <span class="k">done</span>
</pre></div><div class="code"><pre>
func<span class="o">()</span> <span class="o">{</span>
<span class="nb">local</span> <span class="nv">i</span><span class="o">=</span><span class="m">0</span>
<span class="k">for</span> i in <span class="sb">`</span>seq <span class="m">1</span> <span class="m">10</span><span class="sb">`</span><span class="p">;</span> <span class="k">do</span>
<span class="nb">echo</span> <span class="s2">"number #</span><span class="nv">$i</span><span class="s2">"</span>
sleep <span class="m">1</span>
<span class="k">done</span>
<span class="o">}</span>
<span class="k">while</span> true<span class="p">;</span> <span class="k">do</span> func<span class="p">;</span> <span class="k">done</span>
</pre></div><br/><blockquote><em>Forrest</em><br/>а алгоритм и обработка исключений не дают коду “упасть”. С shell это возможно?</blockquote>В Shell исключений нет, есть коды возврата из функций и из программ, которые можно проверять.<br/><div class="code"><pre>
cat x
<span class="nb">echo</span> <span class="nv">$?</span>
cat /etc/passwd
<span class="nb">echo</span> <span class="nv">$?</span>
</pre></div>И обычно программа левая квадратная скобка (сокращение имени программы test) используется для проверки кода возврата, существования файла и так далее.<br/><div class="code"><pre>help [<br/>help test</pre></div><br/>Но также и сами конструкции Shell могут проверять коды возврата программ, что даже программа test не нужна.<br/><div class="code"><pre>
func<span class="o">()</span> <span class="o">{</span>
<span class="nb">local</span> <span class="nv">filename</span><span class="o">=</span><span class="nv">$1</span>
<span class="k">if</span> cat <span class="s2">"</span><span class="nv">$filename</span><span class="s2">"</span> <span class="p">&</span>>/dev/null<span class="p">;</span> <span class="k">then</span>
<span class="nb">echo</span> <span class="s2">"See file </span><span class="nv">$filename</span><span class="s2">"</span>
<span class="k">else</span>
<span class="nb">echo</span> <span class="s2">"Can't see file </span><span class="nv">$filename</span><span class="s2">"</span>
<span class="k">fi</span>
<span class="o">}</span>
func x
func /etc/passwd
</pre></div><div class="code"><pre>[guest@localhost ~]$ func x<br/>Can't see file x<br/>[guest@localhost ~]$ func /etc/passwd<br/>See file /etc/passwd<br/>[guest@localhost ~]$</pre></div><br/>Конвейерная гибкость - тоже частый приём<br/><div class="code"><pre>
func1<span class="o">()</span>
<span class="o">{</span>
<span class="k">for</span> i in <span class="sb">`</span>seq <span class="nv">$1</span><span class="sb">`</span><span class="p">;</span> <span class="k">do</span>
<span class="nb">echo</span> -n abc
<span class="k">done</span>
<span class="o">}</span>
func2<span class="o">()</span>
<span class="o">{</span>
sed <span class="s1">'s/.*/&'</span><span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span><span class="s1">'&/'</span>
<span class="o">}</span>
func3<span class="o">()</span>
<span class="o">{</span>
awk <span class="s1">'{ print char_left $0 char_right }'</span> <span class="nv">char_left</span><span class="o">=</span><span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span> <span class="nv">char_right</span><span class="o">=</span><span class="s2">"</span><span class="nv">$2</span><span class="s2">"</span>
<span class="o">}</span>
run<span class="o">()</span>
<span class="o">{</span>
func1 <span class="m">1</span> <span class="p">|</span> func2 x <span class="p">|</span> func3 <span class="s2">"|"</span> <span class="s2">"|"</span>
func1 <span class="m">2</span> <span class="p">|</span> func2 X <span class="p">|</span> func3 <span class="s2">"-==="</span> <span class="s2">"===-"</span>
<span class="o">}</span>
run
</pre></div><div class="code"><pre>[guest@localhost ~]$ run<br/>|abcxabc|<br/>-===abcabcXabcabc===-<br/>[guest@localhost ~]$</pre></div><br/><blockquote><em>Forrest</em><br/>Надо чтобы код работал в разных системах без проблем.</blockquote>Для каждой системы обычно своя версия программы пишется. Питон также не поможет сделать кроссплатформенное приложение, так как разные операционные системы различаются по своей работе с файлами, с сетями и прочим вещам. Питон в лине при записи в файл пишет с LF на конце строки, а в винде при записи в файл пишет с CR LF на конце строки. При чтении в бинарном режиме в лине из файла, созданного в винде, код ломается, хотя файл писался этим же кодом, просто запущенным в той системе в то время. То есть сам питон, его интерпретатор по-разному работает в разных операционных системах. Также, например, программа ping в одной операционной системе и программа ping в другой операционной системе имеют разные опции, хотя и называются одинаково.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T05:37:18+03:00Forrest210186<strong>py.user.next</strong><br/>Не разобрался как работать с shell, но цель - все должно работать в вечном цикле, а алгоритм и обработка исключений не дают коду “упасть”. С shell это возможно?<br/>P.S. Надо чтобы код работал в разных системах без проблем.<br/>Спасибо.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-27T01:03:23+03:00py.user.next210184<blockquote><em>Forrest</em><br/>Получал ошибку : ping : нет такой команды.</blockquote>Да, она в пакете находится, а он может быть не установлен.<br/><br/><blockquote><em>Forrest</em><br/>Правьте под себя, товатрисчи, и будет вам счастье.</blockquote>Вообще, тебе надо сделать два скрипта: один добывает время, которое надо поставить; второй получает время и устанавливает его в системе. Первый скрипт запускается без прав, а второй с правами.<br/><br/>И тогда тут уже возникает вопрос, нужно ли это писать на питоне. Для таких вещей Shell (язык) подходит лучше всего, так как там это всё удобно делать. И он как раз подходит для системных администраторов, которые ничего не смыслят в программировании.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-26T21:47:39+03:00Forrest210173<strong>FishHook</strong><br/>пробовал свой скрипт в другой системе, под Pycharm 2020(работает под 2018, модули все есть). Получал ошибку : ping : нет такой команды.<br/>Спасибо если подскажите в чем причина, но нэте ответа так и не нашел или не понял.<br/>Спасибо за ответ.
Общий :: Python для новичков :: Как изменить системное время?
2020-05-26T21:42:04+03:00Forrest210171<strong>FishHook</strong><br/>Вот код, собрал из того что нашел в нэте. Делал под свои цели. Проверяет готовность сервера, если нет, спрашивает другой сервер. Если пропинговался, отправляем запрос - получить время. Потом через СУДО меняем время в системе.<br/>Правьте под себя, товатрисчи, и будет вам счастье.<br/><br/><div class="code"><pre> <span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">strftime</span><span class="p">,</span> <span class="n">localtime</span>
<span class="kn">from</span> <span class="nn">ntplib</span> <span class="kn">import</span> <span class="n">NTPClient</span>
<span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">system</span>
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
<span class="c1">###################################################################################</span>
<span class="c1"># кусок кода выполняет синхронизацию по времени с NTP- сервером</span>
<span class="c1"># в случае не ответа одного пытается подключится к другому</span>
<span class="n">sudo_password</span> <span class="o">=</span> <span class="s1">'mypass'</span> <span class="c1"># sudo пароль</span>
<span class="n">hostnames</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"1.ua.pool.ntp.org"</span><span class="p">,</span> <span class="s2">"0.ua.pool.ntp.org"</span><span class="p">,</span> <span class="c1"># адреса серверов</span>
<span class="s2">"3.ua.pool.ntp.org"</span><span class="p">,</span> <span class="s2">"2.ua.pool.ntp.org"</span><span class="p">]</span>
<span class="n">minute_ntp</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">14</span><span class="p">,</span> <span class="mi">60</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span> <span class="c1"># список минут обновления времени</span>
<span class="n">min_now</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">60</span><span class="p">)</span> <span class="c1"># список текущих минут для теста, в функ-ции заменить на текущую минуту</span>
<span class="n">cecond_main</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="c1"># секунды окончательного расчета</span>
<span class="n">cecond_first_update_data</span> <span class="o">=</span> <span class="p">[</span><span class="mi">22</span><span class="p">,</span> <span class="mi">44</span><span class="p">]</span> <span class="c1"># секунды для предварительного обновления</span>
<span class="n">cecond_ntp_end</span> <span class="o">=</span> <span class="mi">14</span> <span class="c1"># после * секунды прекратить пинговать сервер NTP</span>
<span class="c1"># В системе выставляем время по Гринвичу</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">NTPClient</span><span class="p">()</span> <span class="c1"># создать класс клиента</span>
<span class="c1"># не доконца понятно как работает опция -w , https://www.opennet.ru/man.shtml?topic=ping&category=8&russian=0</span>
<span class="k">def</span> <span class="nf">time_ntp_sys</span><span class="p">():</span>
<span class="c1"># Проверка работоспособности сервера, если нет, попытка найти другой сервер</span>
<span class="c1"># завершается если превысит cecond_ntp_end секунд</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
<span class="n">now_time</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="c1"># Текущая дата со временем</span>
<span class="n">cur_minute</span> <span class="o">=</span> <span class="n">now_time</span><span class="o">.</span><span class="n">minute</span> <span class="c1"># Минута текущая</span>
<span class="n">cur_second</span> <span class="o">=</span> <span class="n">now_time</span><span class="o">.</span><span class="n">second</span> <span class="c1"># Секунда текущие</span>
<span class="k">if</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">cur_minute</span> <span class="ow">in</span> <span class="n">minute_ntp</span> <span class="ow">and</span> <span class="n">cur_second</span> <span class="o">></span> <span class="n">cecond_ntp_end</span><span class="p">:</span> <span class="k">break</span> <span class="c1"># условия выхода из ф-ии</span>
<span class="k">for</span> <span class="n">hostname</span> <span class="ow">in</span> <span class="n">hostnames</span><span class="p">:</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">system</span><span class="p">(</span><span class="s2">"ping -c 1 -w 4 "</span> <span class="o">+</span> <span class="n">hostname</span><span class="p">)</span> <span class="c1"># пингуем</span>
<span class="k">if</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># and then check the response...</span>
<span class="n">now_ntp</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="n">hostname</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span> <span class="c1"># полученные данные (класс)</span>
<span class="n">now_ntp_glob</span> <span class="o">=</span> <span class="n">now_ntp</span><span class="o">.</span><span class="n">tx_time</span> <span class="c1"># получ. время в глоб-ом форм.(секунд.микросек от эпохи)</span>
<span class="n">mlsec_txt</span> <span class="o">=</span> <span class="nb">repr</span><span class="p">(</span><span class="n">now_ntp_glob</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)[</span><span class="mi">1</span><span class="p">][:</span><span class="mi">3</span><span class="p">]</span> <span class="c1"># получаю мили-да в тексте (избежать импорта datatime)</span>
<span class="n">now_ntp</span> <span class="o">=</span> <span class="n">strftime</span><span class="p">(</span><span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S.{}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mlsec_txt</span><span class="p">),</span>
<span class="n">localtime</span><span class="p">(</span><span class="n">now_ntp_glob</span><span class="p">))</span> <span class="c1"># формат-ие для передачи</span>
<span class="c1"># now_ntp = "2020-05-23 10:08:51.399229" # тест пример</span>
<span class="n">comand</span> <span class="o">=</span> <span class="s1">'date -s '</span> <span class="c1"># команда изменения системной даты</span>
<span class="c1"># преобразование в строку вида: sudo date -s "2020-05-23 10:08:51.399229"</span>
<span class="n">comand</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%s</span><span class="s1"> "</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">comand</span><span class="p">,</span> <span class="n">now_ntp</span><span class="p">)</span>
<span class="n">system</span><span class="p">(</span><span class="s1">'echo </span><span class="si">%s</span><span class="s1">|sudo -S </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">sudo_password</span><span class="p">,</span> <span class="n">comand</span><span class="p">))</span> <span class="c1"># Выполнение команды изменения даты системы</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span><span class="s1">'-------------------------------------------------'</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="n">hostname</span><span class="p">,</span> <span class="s1">'is down!'</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="s2">"Не удача"</span><span class="p">,</span> <span class="n">response</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="s1">'-------------------------------------------------'</span><span class="p">)</span>
<span class="n">time_ntp_sys</span><span class="p">()</span>
</pre></div>
Общий :: Python для новичков :: Как изменить системное время?
2020-05-22T13:26:07+03:00FishHook210063У вас есть питонья программа которую вы пишите. У программы не хватает прав на совершение неких операций. Вы спрашиваете, как запустить программу с повышением прав?<br/>Ну как-то так видимо<br/><div class="code"><pre>domain@user/home$ sudo python my_program.py </pre></div>
Общий :: Python для новичков :: Как изменить системное время?
2020-05-22T11:27:48+03:00Forrest210055<blockquote><em>FishHook</em><br/>Запускайте скрипт с sudo.</blockquote>Это как бы понятно. Для меня вопрос больше в модуле и синтаксисе. Чем и как вызвать SUDO, и передать пароль SUDO, и чтоб все было автоматом.<br/>Спасибо.