Ни один из методов не работал для меня. Но я нашел, что это . Графический график matplotlib в реальном времени не работает, пока он все еще находится в цикле
. Все, что вам нужно, это добавить
plt.pause(0.0001)
и чем вы мог видеть новый сюжет.
Итак, ваш код должен выглядеть так, и он будет работать
import matplotlib.pyplot as plt
import numpy as np
plt.ion() ## Note this correction
fig=plt.figure()
plt.axis([0,1000,0,1])
i=0
x=list()
y=list()
while i <1000:
temp_y=np.random.random();
x.append(i);
y.append(temp_y);
plt.scatter(i,temp_y);
i+=1;
plt.show()
plt.pause(0.0001) #Note this correction
После вдохновения от @colde и небольшого количества работы я хотел поделиться своим пакетным сценарием, который реализует его ответ.
Он запускается планировщиком задач каждые 10 минут, сначала проверяет, есть ли подключение к Интернету, и, если да, проверяет, изменился ли мой публичный IP-адрес, и только в этом случае обновляет DNS cloudflare через их API.
Я анонимизировал свои личные идентификаторы и URL-адрес API, очевидно, вам нужно их изменить.
@echo off
cls
setlocal EnableExtensions EnableDelayedExpansion
set logFile=.\UpdatePublicIP.log
call :log "--- SCRIPT STARTED ---"
goto TestInternet
:log
echo [!date! !time!] %~1
echo [!date! !time!] %~1 >>%logFile%
exit /b 0
:TestInternet
REM First test for internet connectivity.
call :log "Detecting internet."
PING -n 1 8.8.8.8|find "Reply from " >NUL
IF NOT ERRORLEVEL 1 goto :CheckPublicIP
IF ERRORLEVEL 1 goto :NoInternet
:NoInternet
call :log "No internet, nothing to do."
goto End
:CheckPublicIP
call :log "Detecting public IP."
for /f %%A in (
'powershell -command "(Invoke-Webrequest "http://api.ipify.org").content"'
) do (
set TempPublicIP=%%A
)
call :log "Current Public IP: %TempPublicIP%"
if not "%TempPublicIP%"=="%PublicIP%" (
call :log "Saved IP [%PublicIP%] different to current [%TempPublicIP%] IP, updating saved PublicIP."
REM Note: setx saves env var but only available in future cmd windows, not current one.
setx PublicIP %TempPublicIP% >nul
goto UpdateDNS
) else (
call :log "Current IP = saved IP, nothing to do."
)
goto End
:UpdateDNS
call :log "Updating CloudFlare DNS record to [%TempPublicIP%]."
curl -X PUT "https://api.cloudflare.com/client/v4/zones/12345abcde12345abcde12345abcde12/dns_records/1234567890qwertyuiop0987654321ab" -H "X-Auth-Email: yourusername@hotmail.com" -H "X-Auth-Key:a123b4567c8defghijklmnopqrstuvwxyz123" -H "Content-Type: application/json" --data "{\"type\":\"A\",\"name\":\"yourdomainname.net\",\"content\":\"%TempPublicIP%\"}"|findstr.exe modified_on >nul
REM Can't use "success":true due to the quote. Assuming the string "modified_on" occurs on success only.
IF NOT ERRORLEVEL 1 goto :CloudFlareSuccess
IF ERRORLEVEL 1 goto :CloudFlareError
goto End
:CloudFlareSuccess
call :log "CloudFlare DNS update succeeded.
goto End
:CloudFlareError
call :log "CloudFlare DNS update failed.
goto End
:End
call :log "--- SCRIPT FINISHED ---"
*.example.net
не поймают example.net
. Однако, как вы упоминаете, если вы пингуете www.example.net
, он попадет на CNAME.
К сожалению, вы не можете иметь CNAME на example.net
, потому что CNAME не разрешено сосуществовать с любыми другими типами записей, а для example.net
у вас по крайней мере будут записи типа NS (которые указывают ваши серверы имен).
Один из способов обойти это, вместо того, чтобы использовать ddns.net - это использовать провайдера, у которого есть API, и напрямую обновить запись A для example.net
. Одним из таких провайдеров может быть Cloudflare , который предоставляет DNS-хостинг бесплатно. Существует множество из руководств о том, как использовать их в качестве динамического DNS.