Új hozzászólás Aktív témák
-
jerry311
nagyúr
válasz sztanozs #3700 üzenetére
SP, de nem "igazi" SP. Cegen beluli API, Client ID es API key kell neki. Elfogadja a fajlt, aztan beteszi a megadott helyre SP-n belul.
Mukodik, ha nem cron futtatja, illetve nem tudom, hogy hol a hbiea amikor cron futtatja. Most epitem be a logging dolgokat, hogy tobbet lassak, ne csak azt, hogy nincs fajl a cron futtatas utan. -
-
justmemory
senior tag
válasz jerry311 #3701 üzenetére
Szia,
tökre más témában, de mintha nekem is lett volna gondom néhány python script futtatásával cron-ból; azt úgy tudtam megoldani, hogy daemon-t írtam a scripthez és abban adtam meg azt hiszem a futtatási gyakoriságot. Sajnos most nem tudom megnézni pontosan, de ha releváns, akkor megpróbálom...
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
sztanozs
veterán
válasz jerry311 #3701 üzenetére
Ezt csekkold meg:
https://stackoverflow.com/a/58514930JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
jerry311
nagyúr
válasz sztanozs #3702 üzenetére
Van python 2 is, de a pelda azt mutatja, hogy fut, meg azt is hogy mennyire nem ertek a kigyobuvoleshez, csak megkaptam mint santa a pupot a hatara.
Egy kis so a sebbe.
Valtoztatasok:
- beleirtam a loggingot, semmi mas valtoztatas nem volt a kodban,
- be voltam lepve SSH-n.Igy lefutott cron-bol ugy, hogy feltoltotte a fajlt, de utana mar nem irta be a logba az API response-t, hanem csak a script vegerol egy 'catch all' hibauzenetet.
2022-10-25 15:40:01,824 - WARNING - SSH connection start
2022-10-25 15:40:35,973 - WARNING - SSH finished
2022-10-25 15:40:35,974 - WARNING - SP File name: NAT-221025-154001.txt
2022-10-25 15:40:35,978 - WARNING - Payload generated
2022-10-25 15:40:44,048 - WARNING - Something went wrongjustmemory
Lefut, mert latom a logokban, hogy lefut, csak valami nem ugy ukodik, mint amikor egy SSH-n belepett felhasznalo futtatja. -
JoinR
senior tag
válasz jerry311 #3699 üzenetére
A cron ugyanolyan userként futtatja a scriptet, mint te?
Lehet máshol keresi a pip packageket?
Nem használsz valami env vart, ami kellene? Pl. REQUESTS_CA_BUNDLE vagy ilyesmi (akár .bashrc-ben is lehet).
Esetleg relative path van valahol a szkriptben?
/dev/null-t írd át valami fájlra és írd utána a 2>&1-t is, hogy lásd az errort.[ Szerkesztve ]
-
jerry311
nagyúr
Hat ezt nem tudom, csak azt, hogy a a useremhez tartozo crontabban vannak a feladatok, a root crontabban csak egy HTML fajl heti "backupja" van:
0 5 * * 1 \cp /var/www/html/index.html /var/www/html/backuplist.html
A pip cuccok tekinteteben szereny tudasommal annyit tudok mondani, hogy a logging package ma lett telepitve, es a cron altal futtatott script ugyanugy logol mintha "kezzel" futtatom.
-
-
-
sztanozs
veterán
válasz jerry311 #3713 üzenetére
vsz python problema lesz amugy - valamelyik package amit hasznalsz az hulyen konfiguralja be magat...
Ha megosztanad valamelyik szkriptet, akkor lehet konnyebben menne az agyalas.[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
jerry311
nagyúr
válasz sztanozs #3714 üzenetére
Remelem nem maradt benne jelszo
#!/usr/bin/env python
# coding=utf-8
"""
Python script to get NAT details from routers, and upload to SharePoint.
This script feeds into Power Automate
Version Control
- 1.0 Initial Release
"""
# Modules to load
import datetime
import requests
import crassh
import logging
# Static variables 1
VPN1 = "1.1.1.1"
VPN3 = "2.2.2.2"
NAT3 = "3.3.3.3"
authfile = "/home/jerry311/credz.txt" # Uid & Passowrd are stored in an external file
url = "https://removed-site-name.azurewebsites.net/api/upload" # Upload URL of API
querystring = {"clientID": "removed-client-id", "docPath": "/Shared%20Documents/Daily%20NAT%20File/"} # Client ID for authentication, destination path on SharePoint
debug = False # Developer debugging
#Logging setup
logging.basicConfig(filename='scripts.log', filemode='a', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
"""
The format for credz.txt is
username: Uid
password: PW
"""
def main():
"""
Main Code Block
Logs onto router, gets the output, and uploads to file on SharePoint.
"""
# Create timestamp to be used in file name
timestamp = datetime.datetime.now().strftime("%y%m%d-%H%M%S")
# Get Uid & Password from credz.txt
username, password = crassh.readauthfile(authfile)
try:
# Connect to router and get output
logging.warning('CRASSH connection start')
hostname = crassh.connect(NAT3, username, password, sysexit=True)
output = crassh.send_command("show run | in Current configuration|extendable", hostname)
crassh.disconnect()
logging.warning('CRASSH finished')
# Create file name to be used on SharePoint
txtoutputfilename = (hostname + "-" + timestamp + ".txt")
logging.warning('File name: ' + txtoutputfilename)
# Create HTML payload from output
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"\"; filename=\"" + str(txtoutputfilename) + "\"\r\nContent-Type: text / plain\r\n\r\n" + str(output) + "\r\n\r\n-----011000010111000001101001--\r\n"
headers = {
"apikey": "removed-api-key",
"Content-Type": "multipart/form-data; boundary=---011000010111000001101001"
}
logging.warning('Payload generated')
# Upload to API
response = requests.request("POST", url, data=payload, headers=headers, params=querystring)
logging.warning('API response: ' + response)
# Print debug info if debug variable is set to True. Uncomment print(output) if you want to see what we collected from router. Lots of text!!!
if debug:
logging.debug('Hostname: ' + hostname)
logging.debug('Timestamp: ' + timestamp)
logging.debug('CRASSH output: ' + output)
logging.debug('File name: ' + txtoutputfilename)
logging.debug('Payload ' + payload)
logging.debug('API response: ' + response)
except:
logging.warning('Something went wrong')
pass # If something fails, move onto next router in the list.
# If run from interpreter, run main code function.
if __name__ == "__main__":
main()
[ Szerkesztve ]
-
sztanozs
veterán
válasz jerry311 #3715 üzenetére
1) en a payload logolast elorebb hoznam, lehet hogy azzal lesz a gond.
2) Illetve megneznem, hoggy tennyleg be tudja-e tolteni rendesen requests modul-t,
3) az except logolasban kiiratnam az aktualis kivetelt is:
except Exception as e:
logging.critical(e)
# vagy
logging.critical(e, exc_info=True)
4) elsore (negyedikre) SSL problemanak tunik, probald meg kikapcsolni az SSL ellenorzest (vagy lecsekkolni, hogy a root profile alatt honnan akarja betolteni a certificate store-t). Ha ez lesz a gond akkor
a) frissitsd/telepitsd fel a root profile alatt a certifi modult; vagy
b) add hozza a szerver CA-t a ca store-hoz kezzel; vagy
c) "kezzel" allitsd be a cert file-t a keresnel.[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
jerry311
nagyúr
válasz sztanozs #3716 üzenetére
1, A payload logolas kozvetlen a payload elkeszitese utan van. A payload log elott nincs payload, csak az alkotoelemei: routerrol gyujtott adatok (output), fajlnev (
txtoutputfilename
), stb. Szerintem ezt nem tudom elorebb vinni.2, Hogyan tudom ezt ellenorizni?
3, Atirtam, meglassuk mit mond.
-
sztanozs
veterán
válasz jerry311 #3717 üzenetére
ennek a helyére (vagy ez után) közvetlenül kellene a payload logolás:
logging.warning('Payload generated')
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Hege1234
addikt
sziasztok!
ha ilyen formában van az idő
startTime=2022-10-26T11:50:00Z
endTime=2022-10-26T13:05:00Zmeglehetne valahogy oldani, hogy
perceket tudjak + - -ba "állítani" úgy, hogy a dátum is forduljon, ha úgy adódik?én valami ilyesmire gondoltam, de úgy tűnik belekavarodtam mert csak NameError-t tudok vele összehozni
from datetime import timedelta
startTime = '2022-10-26T20:00:00Z'
time_test_minus = datetime.datetime.utcnow().strftime(startTime, '%Y-%m-%dT%H:%M:%SZ')
time_test_minus + timedelta(minutes=-45)
print(time_test_minus) -
Capricornus
aktív tag
válasz Hege1234 #3719 üzenetére
Én az astropy.time-al szoktam ilyen problémákat kezelni. Sima datetime-ot nem használok, mert szerintem nagyon nehézkes. Ha neked csak a sima datetime jöhet szóba, abban sajnos nem tudtam én sem ezt megoldani.
from datetime import timedelta
from astropy.time import Time
startTime = '2022-10-26T20:00:00Z'
date_and_time = Time(startTime, format='isot', scale='utc')
time_test_minus = date_and_time + timedelta(minutes=-45)
print(time_test_minus)[ Szerkesztve ]
Per aspera ad astra!
-
Hege1234
addikt
válasz Capricornus #3720 üzenetére
köszi, ha semmi mással nem megoldható
akkor szuper megoldás ez is!elsősorban külső modulok nélküli megoldást keresnék
+ehhez még kell más egyéb modul is a működéséhez -
cousin333
addikt
válasz Hege1234 #3719 üzenetére
Pontosan mit szeretnél elérni? Alapvetően az a problémád, hogy kevered a datetime objektumot és annak a sztring megfelelőjét. Illetve nem importálod a datetime modult, csak egy elemét. Azt sem értem, hogy a fenti példában minek a startTime, ha egyszer a pillanatnyi időt használod. Pár példa:
import datetime
TIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
startTime = '2022-10-26T20:00:00Z'
# Ido objektum a sztringbol (datetime.datetime objektumkent)
start = datetime.datetime.strptime(startTime, TIME_FORMAT)
# pillanatnyi ido (datetime.datetime objektumkent)
now = datetime.datetime.now()
# ebbol a pillanatnyi ido (sztringkent)
now_str = now.strftime(TIME_FORMAT)
print(now_str)
# idokulonbseget hozzaadva (datetime.datetime objektumkent)
time_test_minus = now + datetime.timedelta(minutes=-45)
# idokulonbseget hozzaadva (sztringkent)
time_test_minus_str = time_test_minus.strftime(TIME_FORMAT)
print(time_test_minus_str)
"We spared no expense"
-
Hege1234
addikt
válasz cousin333 #3724 üzenetére
bocsi azt nem fejtettem ki, hogy
request.get -hez használnám a params-ba, hogy az időt mozgatva + - ba
le tudjak kérni adatokat
így néha a now-ra van szükségem néha pedig egy külső fájlból adva van
egy pár nappal ezelőtti dátum ahonnan az időből el kell venni perceket...ezért keveredett bele a now és a startTime-is
köszönöm a példákat is, szuperül működik!
-
stellaz
addikt
Sziasztok!
Kisfiam sracth után kezdi a pythont tanulgatni és ezzel együtt nekem is megjött hozzá a kedvem (nincs igazából programozói tapasztalatom, úgy 30 éve szórakoztam némi Basiccel videoton számítógépen), és találtam egy jó kis oldalt, ahol vannak oktató anyagok (www.sulipy.hu). Itt az egyik feladatnál elakadtam, ennek a megoldásához szeretnék segítséget kérni:
A feladat leírása: "Írj egy programot, amely [1;12] intervallumon állít elő 20 darab véletlenszámot! A képernyőre kizárólag csak a 3-mal oszthatóakat írja ki, és a végén informálja a felhasználót arról is, hány darab ilyen szám volt. "
A vastagított részt nem tudom megoldani, amúgy eddig jutottam:
import random for i in range(20):
......szam = random.randint(1, 12)
......if szam % 3 == 0:
............print(szam)Előre is köszönöm, ha valaki tudna segíteni.
[ Szerkesztve ]
Hifiman fejhallgatóhoz keresek ballanced kábelt
-
sztanozs
veterán
válasz stellaz #3726 üzenetére
majdnem jo, csak az import kell kulon sorba
import random
for i in range(20):
szam = random.randint(1, 12)
if szam % 3 == 0:
print(szam)
Ja, es hasznalj kodformazast
tomorebben kb igy:
from random import randint
[print(i) for i in randint(1,12) if i%3 == 0]
vagy ha egysoros kell
[print(i)for i in __import__('random').randint(1,12)if i%3<1]
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
axioma
veterán
-
lsebestyen
addikt
Akkor bedobok egy harmadik verziót, én tömbbel oldanám meg, persze ha már a tananyag tart ott:
import random
oszthato = []
for i in range(20):
szam = random.randint(1, 12)
if szam % 3 == 0:
oszthato.append(szam)
print("Harommal oszthato random szamok: {0}\n{1}db ilyen szam volt".format(oszthato, len(oszthato))) -
-
sztanozs
veterán
válasz stellaz #3730 üzenetére
Oh, kell a darabszam is?
from random import randint
szamok = [randint(1,12) for i in range(20)]
harommal_oszthato = [i for i in szamok if i%3 == 0]
# vagy
# harommal_oszthato = [*filter(lambda i: i%3 == 0, szamok)]
print(f'{len(harommal_oszthato)} harommal oszthato szam volt:', *harommal_oszthato)
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
axioma
veterán
Ertem h elvezitek a python code golf-ozast ;-) es tok jo a tomorseg es en is szeretem kihasznalni, de a listas megoldasok vagy me'g egy join-t is belekavarnak vagy nem soronkent lesz kiirva ahogy eredetileg (az elsonel extra korito karakterekkel is megspekelve), a *-ot se eroltetnem ezen a szinten, es a formazos kiirasokra is raer ha mar fontos lesz, egyelore 1 print 1 parameter elv menten legyen magabiztos. Szvsz.
Bocs, nem vagyok tanar csak van korulottem kezdo... multkor masnak kapcsan egy 20 evvel ezelotti basic verzioban segitettem, na kb oda kell[het] ilyenkor visszamenni bonyolultsagilag. -
sztanozs
veterán
f-string es lista kibontasban lehet, hogy igazad van. A lista-kifejezes viszont kifejezetten "pythonos" megoldas, szerintem annak az "eroltetese" kifejezetten kivanatos - raadasul nem is bonyolultabb, mint a kibontott valtozat.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
-
-
Hege1234
addikt
sziasztok,
szeretném a 20221102 napon létrehozott acc-info.json fájlt
törölni a mappából akkor, ha eltelt 5 nap vagy több
így futtatva a .py fájlt 20221107.-én vagy 08.-án
akkor már a törléssel kezdenea dátumok megvannak hozzá, viszont az if-el elakadtam
már, ha egyáltalán kelleni fog hozzáimport os, time, datetime
from datetime import date
import glob
filename = ".\\Downloads\\info\\acc-info.json"
today = date.today()
current_local_date = today.strftime("%Y%m%d")
print('\n jelenlegi dátum: ',current_local_date)
created = os.path.getctime(filename)
year,month,day,hour,minute,second=time.localtime(created)[:-3]
created_date = "%02d%02d%02d"%(year,month,day)
print('\n fájl létrehozva: ',created_date)
add_day = '+5'
added_days = "%02d%02d%02d"%(year,month,day+int(add_day))
print(' hozzáadva '+add_day+' nap: ',added_days)ezzel szoktam a fájlokat törölni
ebbe, hozzá lehet adni a "dátumos törlést"
vagy van erre jobb megoldás is?delete_this = glob.glob(filename)
for f in delete_this:
os.remove(f) -
sztanozs
veterán
válasz Hege1234 #3740 üzenetére
Nekem a getctime valami hulyeseget ad vissza...
getctime(filename)
Return the metadata change time of a file, reported by os.stat().
Ez biztos nem a creation time...tobb, mint 5 napos torles:
delete_this = glob.glob(filename)
today = date.today()
for f in delete_this:
if (today - date.fromtimestamp(os.path.getmtime(f)).days > 5:
os.remove(f)[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Hege1234
addikt
válasz sztanozs #3741 üzenetére
köszi a gyors választ
innen néztem ki:
[link]
ha nem windows-on próbáltad akkor lehet gond vele
Note: A file's ctime on Linux is slightly different than on Windows.
Windows users know theirs as "creation time".
Linux users know theirs as "change time".a fájl tulajdonságait megnézve valós a nov. 02 létrehozott dátum
[ Szerkesztve ]
-
sztanozs
veterán
válasz Hege1234 #3742 üzenetére
gyakorlatban nalam:
>>> filename
'c:\\temp\\a.jpg'
>>> date.fromtimestamp(os.path.getmtime(filename))
datetime.date(2018, 11, 21)
>>> date.fromtimestamp(os.path.getctime(filename))
datetime.date(2022, 10, 2)Persze jobban belegondolva valos a kiirt datum, hiszen a faj regi, de csak nemreg masoltam at egy masik geprol. Tehet ebben a konyvtarban ekkor lett letrehozva a fajl, de utoljara modositva sokkal korabban volt...
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
stellaz
addikt
Sziasztok!
Előre is elnézés, nem akarom szemetelni a topicot, de most tanulgatom a programozást, mint olyat és sikerült írnom kétféle módon is egy prím szám ellenőrző programot, amitől most az első komoly sikerélményem vanszam_hossz = int(input('Üsd be, melyik számig kéred a prím számok listáját '))
szam = 1
db = 0
while szam <= szam_hossz:
if szam == 2 or szam == 3 or szam == 5 or szam == 7:
print(szam, 'Primszám')
elif szam > 9 and szam / 2 % 1 != 0 and szam / 3 % 1 !=0 and szam / 5 % 1 !=0 and szam / 7 % 1 !=0:
print(szam, 'prim szám')
db = db + 1
szam = szam + 1
print(db + 4, 'prím szám van összesen', szam_hossz, '-ig')illetve
szam_hossz = int(input('Üsd be, melyik számig kéred a prím számok listáját '))
db = 0
szam = 1
for i in range(szam_hossz):
szam = szam + 1
if szam == 2 or szam == 3 or szam == 5 or szam == 7:
print(szam, 'Primszám')
elif szam > 9 and szam / 2 % 1 != 0 and szam / 3 % 1 !=0 and szam / 5 % 1 !=0 and szam / 7 % 1 !=0:
print(szam, 'prim szám')
db = db + 1
print(db + 4, 'prím szám van összesen', szam_hossz, '-ig')Máskülönben most meg is lepődtem, hogy ilyen gyakoriak a prímszámok.
[ Szerkesztve ]
Hifiman fejhallgatóhoz keresek ballanced kábelt
-
kovisoft
őstag
válasz stellaz #3744 üzenetére
Ez a módszer 120-ig működik, de 121-re már nem, mivel csak a max 7-tel való oszthatóságot vizsgálod, így a 121-re is azt mondja, hogy prím, pedig az a 11*11.
A szám négyzetgyökéig meg kellene nézni a lehetséges osztókat.
Szerk: A másik probléma, hogy nem így kell vizsgálni az oszthatóságot, mert ez nagy számoknál hibás eredményt ad, pl. 1234567891234567890/7%1 == 0 és 1234567891234567891/7%1 == 0, pedig mindkettő nem lehet. Az oszthatóságot inkább így kellene vizsgálni: 1234567891234567890%7 == 0 (mert pl. 1234567891234567891%7 == 1).
[ Szerkesztve ]
-
cousin333
addikt
válasz stellaz #3746 üzenetére
Alapvetően egy függvényre van szükséged, ami megmondja egy számról, hogy prím-e (True) vagy sem (False):
import math
def is_prime(num: int) -> bool:
upper = int(math.sqrt(num) + 1)
for i in range(2, upper):
if not num % i:
return False
return True
Ezt a függvényt kell használni a szóba jöhető számokra. A filter függvénnyel kiszűrhetők azok az értékek, amikre a válasz igaz (prímek). A list pedig listát készít a generált értékekből:
szam = 200
primek = list(filter(is_prime, range(2, szam)))
[ Szerkesztve ]
"We spared no expense"
Új hozzászólás Aktív témák
- Hogy is néznek ki a gépeink?
- Autós topik
- Nothing Phone 2a - semmi nem drága
- iPad topik
- Készülőben a Xiaomi 2021-es csúcsmodelljeinek HyperOS frissítése
- Rövid előzetesen a S.T.A.L.K.E.R. 2: Heart of Chornobyl
- Ukrajnai háború
- Autóápolás, karbantartás, fényezés
- Kupon kunyeráló
- Steam Deck
- További aktív témák...