- Meggyi001: Nyilvános wc-k.....még mindig hiánypótló...
- Szoszo94: Xiaomi Mi Router 3G - Padavanra fel!
- bitpork: Phautós tali a Balcsinál 2025 Augusztus 2 napján (szombat)
- Luck Dragon: Asszociációs játék. :)
- Meggyi001: Anya, tudsz segíteni a matekban?....Nem érek rá kisfiam, majd segít a ChatGPT...
- sziku69: Fűzzük össze a szavakat :)
- gban: Ingyen kellene, de tegnapra
- Parci: Milyen mosógépet vegyek?
- Gurulunk, WAZE?!
- Ndruu: Segíts kereshetővé tenni a PH-s arcképeket!
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
Új hozzászólás Aktív témák
-
sh4d0w
félisten
Oke, leszurtem odaig, hogy a "$" jellel van baja...
python ./passcheck.py P@ssw0rd
Your password found in a common password list, it is a keyboard pattern or leet speak word. Choose a different one. Score: 0
python --version
Python 3.9.2 -
sh4d0w
félisten
válasz
kovisoft #3790 üzenetére
Nagyon furi. A nehany soros megoldasod mukodik es itt az ominozus reszlet a leetFile-bol:
P@$sw0rd
P@$$word
P@$$w0rd
P@$5word
P@$5w0rd
P@5sword
P@5sw0rdMivel a shellben is gondjaim vannak ezzel, nem lehet, hogy onnan eredeztetheto a problema? Jelen pillanatban zsh-bol megy, megnezem bash-ban.
MOD: bash-ben sem mukodik (nem a zsh-bol inditottam).
-
kovisoft
őstag
-
sh4d0w
félisten
Na, ilyennel meg nem talalkoztam, van-e otlete vkinek?
Kod:with open(leetFile,'r') as e:
leetList = e.read().splitlines()
if (passToCheck in cpList) or (passToCheck in commonKeyPatterns) or (passToCheck in leetList):
print('Your password found in a common password list, it is a keyboard pattern or leet speak word. Choose a different one. Score: 0')
exit()
P@$$w0rd - nem talalja meg a leetList-ben, holott shellben kikopi, de ott is csak akkor, ha escape-elem a spec karaktereket. Hogyan tudnam ezt megoldani?
-
Hege1234
addikt
üdv,
hogyan oldható meg, hogy ha egymás alatt lévő sorok vannak
azokat oszlopokba tudjam rendezni?elég macerás, hogy állandóan görgetni kell...
194 sor van ezeket szeretném több oszlopba rendezni
import json
while True:
try:
fgq = open('mycanal.json', 'r', encoding='utf8')
except FileNotFoundError:
print('\n[ERROR] nincs json file\n')
import re
index = 1
title = json.load(fgq)
for thevalue in title.values():
gg = f"{index:03}"+' # '+' - '+thevalue["name"]
print(gg)
index += 1
all = index -1
print('\n összes csatorna: '+str(all)+'\n')
def process(text):
for match in re.finditer(r'(\d+-\d+)|\d+', text):
x = match.group()
if '-' in x:
a, b = x.split('-')
for i in range(int(a), int(b)+1):
yield i
else:
yield int(x)
text = input('\nírd ide a számot: ') -
Hege1234
addikt
válasz
sztanozs #3779 üzenetére
ez, ami a linkben volt nagyon király
több mint 40 function-t használok
a különböző menükhöz..és csak bele kellett tennem a menükbe és már
működött is változtatás nélkül
köszi!import win32gui, win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
win32gui.SetForegroundWindow(hwnd)
-
sztanozs
veterán
-
sztanozs
veterán
Asszem com port sniffing nem lehetseges, hacsak nem egy kifejezetten olyan hardvert hasznalsz, ami ezt tamogatja (masik csatornan).
Ami meg lehetseges lehet, hogy letrehozol virtualis com portokat es csinlasz egy programot, ami a virtualis es fizikai com portok kozott tolja at az adatokat es azokat logolod: [link]
A programban, pedig amit sniffelni akarsz atallitod a fizikai COM portokrol a forgalmat a virtualisakra.
-
tvamos
nagyúr
Tudok en olyan python taskot irni, ami a programomban megnyitott osszes com port (2-6) adatforgalmat time stemppel es adat itannyal sniffeli?
-
Hege1234
addikt
üdv,
tkinter-el meglehet valahogy oldani, hogy ha egy gomb behoz egy új ablakot
akkor utána átváltson a cmd ablakba?vagy esetleg ctypes-el?
ctypes-el szoktam a cmd ablak-ot elneveznictypes.windll.kernel32.SetConsoleTitleW('____'+'_Decr'+' '+VERSION+'____'+dirPath+'____'+menu02a+'____'+output+'____')
de arra nem találtam semmi megoldást amivel előtérbe lehetne hozni az ablakot -
-
sztanozs
veterán
-
tvamos
nagyúr
válasz
sztanozs #3770 üzenetére
Igy erted?
powerSuplyDrop.config(value=com_ports)
Mert ha ezt teszem, akkor a kovetkezo hibat dobja:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.8/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/home/tomi/Projects/GitHub/TestProjects/PySerialTest/SerialportsDropDown.py", line 68, in scan_serial_ports
powerSuplyDrop.config(value=com_ports)
NameError: name 'powerSuplyDrop' is not definedAmugy igen, combobox.
-
tvamos
nagyúr
Probaltam kesziteni egy drop down menut, de valami gyikja van.
Itt a kod: [link]
A hibauzenet:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.8/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/home/tomi/Projects/GitHub/TestProjects/PySerialTest/SerialportsDropDown.py", line 68, in scan_serial_ports
self.powerSuplyDrop.config(value=com_ports)
AttributeError: 'Window' object has no attribute 'powerSuplyDrop'Ra tudnatok nezni, miert nem latja a 'powerSuplyDrop'-ot? Hiszen ott van... vagy megsincs?
Amugy addig tetszetosen lefut a kod, hogy kiirja a portokat: ['/dev/ttyS0', '/dev/ttyACM0']
(Es frankon lefut linuxon, meg w10-en is, szoval addig patent.) -
sztanozs
veterán
válasz
Hege1234 #3766 üzenetére
Regex nem rak sorba, a pipe csak egy egyszeru OR operator, minden egyezest felkap.
ha sorban akarod feltolteni a listat, akkor csinalj egy listata a regexekkel es ciklusban toltsd be a talalatokat a vegso listaba.hd = open("hd-links.txt").read()
sorted_rex = [r".*1080p.*dash.*|.*dash.*1080p.*", r".*720p.*dash.*|.*dash.*720p.*", r".*hd_dash.*", r".*sd_dash.*|.*dash.*540p.*|.*540p.*dash.*"]
sorted_list = []
for rex in sorted_rex:
sorted_list += re.findall(rex, hd)
hd_link = sorted_list[0]
print('1080p \ 720p \ 540p: \n'+hd_link)
print(hd_link, file=open("dash.txt", "w")) -
Hege1234
addikt
sziasztok!
azt gondoltam, hogy a lenti regex az egyben egy sorrendet is jelent
de úgy tűnik nem...
a .sort -ot lehet esetleg regex-el kombinálni?vagy esetleg egy jobb módszer rá, hogy kövesse a regex-ben lévő sorrendet?
a gond, hogy nem csak dash hanem hls link is található a hd-links.txt-ben amire nincs szükségem
hd = open("hd-links.txt").read()
un_sorted = re.findall(r".*1080p.*dash.*|.*dash.*1080p.*|.*720p.*dash.*|.*dash.*720p.*|.*hd_dash.*|.*sd_dash.*|.*dash.*540p.*|.*540p.*dash.*", hd)
un_sorted.sort(reverse=True)
hd_link = un_sorted[0]
print('1080p \ 720p \ 540p: \n'+hd_link)
print(hd_link, file=open("dash.txt", "w")) -
cousin333
addikt
Mégegyszer: a kódom működik és szerintem jól átlátható. Az eredetileg felvetett megoldás javított kiadása, demonstráció céljára éppen megfelel. Éppen azért nem használom a gyári függvényt, mert az lehet, hogy gyors, de nem látszik a mögöttes logika. Az algoritmus lehetne szofisztikáltabban és optimalizáltabb, de pár száz elemre nem igazán lesz látványos a különbség. Az meg, hogy millió elemre nem a leggyorsabb...
Egyébként list comprehension-nel is megoldható lenne, ha generátor függvényt használok, ami belül számon tartja az addigi prímszámokat. Az sem lenne optimális, mert kétszer tárolnám el a prímlistát.
ui: Így jobban megnézve az én kódomban (#3748) egy fia list comprehension sincs...
-
sztanozs
veterán
válasz
MasterMark #3761 üzenetére
Ott kell lefutnia ahol van…
viszont a pythonban nincs normalis szalkezeles, tehat az eredmeny nem biztos hogy olyan lesz ahogy elkepzeles. -
MasterMark
titán
Hello, a
subprocess.run
miért nem akkor fut le amikor a kódban van, hanem rögtön az elején? -
axioma
veterán
válasz
cousin333 #3758 üzenetére
OK, a rovidites csak a list compr.-re vonatkozott, es hogy ujra vegigvizsgal felesleges elemekre. Ha a konyvtarit hivtad volna benne nem szoltam volna, de itt konkretan a lista kepzesi modja _miatt_ nem kerulheto ki a teljes vizsgalat per elem (a keszulo lista nem tud be-ki parameterkent megjelenni az ellenorzo fg-ben).
Szerintem nem kell az olvashatosag oltaran felaldozni a kitevot a nagyordoban, erre akartam utalni. Amugy minden mas esetben eljen soka a list comp, surun hasznalom. -
cousin333
addikt
Ez a gyakran előforduló alap szituáció, ami egy lista (tágabban: egy iterálható objektum) elemein hajtja végre ugyanazt a függvényt:
lista = []
for elem in elemek:
lista.append(func(elem))
A func() függvényhívásnak ott kell lennie különben egyszerűen csak átmásolnád a listát. Ugyanez rövidebben ún. list comprehension-nel:
lista = [func(elem) for elem in elemek]
Gyakorlatilag a for ciklus belsejét kihoztuk az elejére, elhagytuk az append-et, és az egészből egy egysoros értékadást csináltunk. Az extra [] tulajdonképpen egy "konstruktor", egy "syntactic sugar" (van erre magyar kifejezés?), ami azt mondja, hogy az eredményt listába szeretném rendezni. Írhattam volna ezt is:
lista = list(func(elem) for elem in elemek)
A [] helyett írhatnék mást is, a szándéktól függően: a {} például - kicsit más szintaxis mellett - egy szótárat (dictionary) hozna létre, míg a () egy generátor kifejezést. Ami egyébként megegyezik a fenti példával, csak a list függvény nélkül. Mint látható, Pythonban az egyes szintaktikai elemek ebben az esetben (is) nagyon szépen egymásra épülnek.
Namost az if kifejezés a fentieknek egy speciális esete: nem akarunk minden elemet felhasználni, csak azokat, amik egy bizonyos feltételnek megfelelnek. Mivel ez egy extra, opcionális eset, logikus, hogy a kifejezés végére kerül, ha egyáltalán szerepel:
lista = [func(elem) for elem in elemek if not elem % 3]
Ugyanígy működik a feltételes értékadás is, amit axioma is írt, ami mondjuk C-ben az x = (a) ? m : n.
Pythonban pedig:
x = m if a else n
Ha nem lenne feltétel, akkor csak simán ezt írnánk:
x = m
Látható, hogy a feltételes és feltétel nélküli értékadás ugyanúgy kezdődik, csak előbbi a feltétellel folytatódik.
-
cousin333
addikt
A kód nem attól lesz jó vagy rossz, hogy mennyire hosszú, hanem hogy mennyire érthető és áttekinthető. A Python segítségével szerencsére tömör és áttekinthető kód írható. Érdemes az alap paradigmákat és a szintaktikát hamar elsajátítani, mert gyorsabbak, átláthatóbbak és hatékonyabbak. Ráadásul így nem készülnek később
for i in range(len(szamok)):
típusú kódok sem.A te példád szerintem nem lett olvashatóbb mint az enyém, de valamivel kétségkívül hosszabb.
Ráadásul a "code golf"-ot átírtad "algoritmus golfra" a rekurzivitással. Lehet, hogy hatékonyabb csillió számnál, de sanszos, hogy azt úgysem fogod kilistázni, és különben is a beépített függvényt fogod alkalmazni.
-
axioma
veterán
De hasznos, nem csak azert mert kevesebb kodsor, hanem atlathatobb es kesobb ma'r lesz majd hogy a listat se allitod elo [tarolod le] ha utana csak 1x vegigmesz rajta, hanem a generalas on the fly tortenik mikor felhasznalod egy kovetkezo lepes inputjakent. Szoval erdemes annyit probalkozni vele, hogy megszokd ezt a fajta irasmodot.
[Az a 'ternary' megvalositasa ami ertheto ugyan de elter mas programnyelvek logikajatol es nem 'prefix(ertelmezes)-mentes' :a=b if c>0 else d
, de ezzel kb. lattad a furasagokat.] -
axioma
veterán
válasz
cousin333 #3748 üzenetére
Megint a code golf ;-) Persze tanulashoz kis szamokra jo, de szamitasigenyre nezve eleg hatekonytalan ez a modszer... HA listazni akarod oket akkor teszteleshez inkabb hasznald a korabbi primeket. En kb igy szoktam [feladvanyoknal alt egymillioig kell, es ez most mobilrol kiprobalas nelkul]:
limit=...
primes=[2,3,5,7,11]
act=11
while act+2<=limit:
act+=2
sact=int(act**0.5)
i=1
while primes[i]<=sact and act%primes[i]!=0:
i+=1
if primes[i]>sact:
primes.append(act)
Tehat: csak paratlan szamokat vizsgal, es azokat is csak a 2-nel nagyobb, de gyokenel kisebbegyenlo, korabban megtalalt primekre.
Amugy van konyvtari fuggveny is primtesztre ;-) -
tvamos
nagyúr
Kiprobaltam, hogy ez mukodik:
harommal_oszthato = [i for i in szamok if i%3 == 0]
De nem nagyon vagom, hogy miert van az "i" a "for" elott, es miert van az "if" utana. De azt latom, hogy ez igy nagyon hatekony.
De lehet, hogy nem kene hasznalnom, mert van, hogy 6-8 honapig nem nyulok Pythonhoz, es kesobb csak megkavarodom tole. -
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)))
-
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).
-
stellaz
veterán
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.
-
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...
-
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
-
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) -
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) -
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
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)
-
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))) -
axioma
veterán
-
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]
-
stellaz
veterán
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.
-
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!
-
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)
-
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 -
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) -
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) -
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 #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. -
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()
-
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.
-
JoinR
őstag
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. -
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. -
sztanozs
veterán
válasz
jerry311 #3701 üzenetére
Ezt csekkold meg:
https://stackoverflow.com/a/58514930 -
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...
-
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.
Új hozzászólás Aktív témák
- Meggyi001: Nyilvános wc-k.....még mindig hiánypótló...
- Kerékpárosok, bringások ide!
- Mibe tegyem a megtakarításaimat?
- Xbox Series X|S
- Kompakt vízhűtés
- Lakáshitel, lakásvásárlás
- Linux kezdőknek
- Milyen légkondit a lakásba?
- Miért álltak az oldalak egy hétig, mi történt?
- Autós topik
- További aktív témák...
- Garmin Vivoactive 5 Okosóra, Bontatlan, Új, 0 Perces, Kék, 1 Év Garancia
- Garmin Vivoactive 5 Okosóra, Bontatlan, Új, 0 Perces, Fekete, 1 Év Garancia
- Akció! Paidashu 10600MAH / 20700MAH Powerbank olcsón!
- Jó áron eladó Lenovo ThinkPad T14s Gen 3/i5-1240P/16 GB/256 SSD/FHD+/IPS/Garancia/
- AMD AM5 Alaplapok
- Extra olcsó! HP 230 Vezetéknélküli USB-s Billentyűzet
- Geforce GTX 1050, 1050 Ti, 1060, 1650, 1660 - GT 1030 - Low profile is (LP)
- Bomba ár! HP ProBook 440 G7 - i5-10GEN I 8GB I 256SSD I HDMI I 14" FHD I Cam I W11 I Gar
- LG 32GR93U-B - 32" IPS - UHD 4K - 144Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDR 400
- Ritkaság! Hibátlan! Intel Core I9 13900KS Processzor!