Új hozzászólás Aktív témák
-
Rimuru
veterán
Szerintem megeri, de fontos hogy milyen jellegut akarsz, pl multiplatform, stb. Azt se tudom hogy python milyen jellegu apit ad a process infokhoz, de pl unix jellegu rendszereken kb csak file parsolasbol all a dolog (legalabbis az informaciok megszerzese).
Vigyázat, csalok!
-
togvau
senior tag
python nab vagyok, Java, és C# tapasztalatom van.
Hogy állítsam össze a fejlesztőkörnyezetemet? Milyen IDE ajánlott? Eddig Eclipse, és VSE-t használtam, na meg SQL-re notepad++-t
Multiplatform irányban maradnék, de főleg vindózos gépen fejlesztek, linuxon "élesezek".[ Szerkesztve ]
hitler, sztálin, micro usb
-
togvau
senior tag
Még nem akarok machine learning izéket programozni, csak pythonozn simán.
Eclipse plugint próbáltam, elég buta a java-hoz képest, ahogya VScode is.
Ami hiányszik, az a normálisabb dokumentáció a metódusokhoz (bár ezek szerint az nincs, mindennél google a barátom), és az, hogy a kiegészíténél ne csak a neveket egészítse ki, hanem mondjuk kidoba a metódus paraméterezésének vázát is.
Na meg az is fura, hogy a vscode, ritkán kezeli az importokat, leggyakrabban manuálisan kell odaírnom.
Az is hiányzik, hogy mondjuk egy kattintásra létehozza a konstruktort
Ez ilyen? Jobb ha megszokom? Vagy a pycharmot is fel kéne raknom?hitler, sztálin, micro usb
-
Janos46
tag
Sziasztok.
Van egy kezdőknek szóló oktató program sorozat,ami az LCD1602-re ír ki. és amit szeretnék összefűzni. Sajnos ez az egy nem műkszik. Meg tudná valaki gyógyítani és visszaküldeni?
Előre is köszönnémimport I2C_LCD_driver
import socket
import fcntl
import struct
mylcd = I2C_LCD_driver.lcd()
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915,
struct.pack('256s', ifname[:15])
)[20:24])
mylcd.lcd_display_string("IP Address:", 1)
mylcd.lcd_display_string(get_ip_address('eth0'), 2)
Artillery, lelkes újonc vagyok, tanulni akarok!
-
Janos46
tag
válasz kovisoft #2710 üzenetére
Ez az az oldal, amit már megcsináltam és abból csak az nem futtatható. Egyébként privben elküldöm a művemet (remélem nem veszed zokon, és hát nem is vagy rászorulva). Lenne helyette más program is, csak a leírás miatt használnám a benne lévőt.
https://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/
Egyébként az alábbit is berakhatnám helyette, de a leírást nem tudnám produkálni, ráadásul én nem tudom megoldani az LCD-n való megjelenítést. Nekem a google fordító mindig be van kapcsolva, és így nem okoz problémát semmilyen nyelv. LOL.import socket
import requests
url = "http://checkip.dyndns.org"
request = requests.get(url)
clean = request.text.split(': ', 1)[1]
your_ip = clean.split('</body></html>', 1)[0]
def getNetworkIp():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.connect(('<broadcast>', 0))
return s.getsockname()[0]
print (("Külső IP: "),(your_ip))
print (("Saját IP: "),(getNetworkIp()))
Ezért kértem a segítséget.Artillery, lelkes újonc vagyok, tanulni akarok!
-
Janos46
tag
válasz kovisoft #2714 üzenetére
3-ast használok. Az átküldött program F pontját futtasd le. Ezt írja ki:
Traceback (most recent call last):
File "/media/pi/FEKETE/Kesz_lesz/Pyrthon_oktato.py", line 126, in <module>
mylcd.lcd_display_string(get_ip_address('eth0'), 2)
File "/media/pi/FEKETE/Kesz_lesz/Pyrthon_oktato.py", line 123, in get_ip_address
struct.pack('256s', ifname[:15])
struct.error: argument for 's' must be a bytes object
------------------------------------------------------------
Ez pedig az ifconfig:
pi@raspberrypi:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.137 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::e092:4c9a:94f4:d2e1 prefixlen 64 scopeid 0x20<link>
ether dc:a6:32:72:44:4a txqueuelen 1000 (Ethernet)
RX packets 1367 bytes 1014588 (990.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 887 bytes 125612 (122.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 90 bytes 45284 (44.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 90 bytes 45284 (44.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.133 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a832:8cdf:a38b:1346 prefixlen 64 scopeid 0x20<link>
ether dc:a6:32:72:44:4c txqueuelen 1000 (Ethernet)
RX packets 142 bytes 20973 (20.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 41 bytes 7175 (7.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
pi@raspberrypi:~ $Artillery, lelkes újonc vagyok, tanulni akarok!
-
Siriusb
veterán
Szerintem már nem látom a fától az erdőt és nem tudom megoldani:
string = "sallala 5 337 2 351 subidu"
Miként tudom regex-szel kiszedni az
5337 és 5351
számokat? Regex mohósága bekavar nálam. A csavar az hogy előre nem lehet tudni, hány számjegyből fognak állni a számok (1 és 6 között), de az ezres elválasztás az biztosan szóköz.[ Szerkesztve ]
-
-
sztanozs
veterán
-
cousin333
addikt
Érdekesség: 2019-es Python fejlesztői felmérés a JetBrains-től (többek között A PyCharm fejlesztői). Mire használják leginkább a Pythont? Nem meglepő módon web fejlesztésre és adatelemzésre.
[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
válasz cousin333 #2723 üzenetére
Lejárt a szerkesztési időm...
Érdekesség: 2019-es Python fejlesztői felmérés a JetBrains-től (többek között A PyCharm fejlesztői). Pár érdekesség:
- 84% elsődleges nyelvként használja!
- nem meglepő módon leginkább web fejlesztésre és adatelemzésre használják
- bár az arányuk rohamosan csökken, 10% még mindig a Python 2-t nyúzza
- a Python 3 felhasználók fele a 3.7-es változatnál jár, a 3.8 kb. 11%-on áll
- webfejlesztés: dominánsan Flask és Django
- adatelemzés: NumPy és Pandas (nem meglepő módon), bár ez szorosabb
- unit testing: pytest és unittest
- adatbázis: PostgreSQL, MySQL, SQLite szinte fej-fej mellett
- operációs rendszer: Linux > Windows > MacOS
- IDE: PyCharm, VSCode, Vim/Jupyter Notebook[ Szerkesztve ]
"We spared no expense"
-
justmemory
senior tag
válasz cousin333 #2724 üzenetére
Érdekes adatok. A machine learning is szép szeletet hasít ki. Amit nem találtam, hogy szó lett volna róla, az a penetration testing... amennyire én tudom, ott is sok minden python alapon megy.
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
Lacc
aktív tag
Pythonban a for ciklus értékadással egyenlő? Én azt hittem, mint a Java-ban a j változó csak a for cikluson belül él (scope, angolul). De úgy nézz ki, azon kívül is.
for i in range(0,3):
... for j in range(0,3):
... continue
... print(i, j)Másik példánál is látszik.
for a in range(0,3):
continue
print(a)
Mindkettőnél az a és j változóknak 2-es lesz az értéke. Megnéztem, még PHP-ban is igaz ez, de Java-ban nem.Ennek van valami különleges neve, hogy a "for cikluson kívül is elérhető a változó"? Vagy hogy a "for ciklus értékadó operátor". Szívesen olvasnék erről többet a témában. De hiba próbáltam ki angolul google-ben nem azt a találatot kapom, amit akarok.
-
Siriusb
veterán
Pythonban menet közben is létrehozhatsz változókat, sőt még a típusát is váltogathatod, általában nem kell előre definiálni semmit. Persze vannak esetek, ahol szükséges, pl. egy cikluson belül append-del adsz értékeket egy listához.
Így hát az adott változó a ciklusodban utolsóként felvett értékkel létezik tovább az adott környezeten belül, hiszen amennyiben ez egy osztályon, függvényen belül történik, kívül már nem lesz elérhető. -
togvau
senior tag
hogy lehet ezt megoldani? A bemenet selection nevű field ez pl (1, 6) állítólag tuple.
Egy list ezen elemeit elemeit akarom kijelölni:self.clsmedialist[selection]
de elszáll hogyTypeError: list indices must be integers or slices, not tuple
Most mit akar? Integer array-t? Rákerestem, neten, az ott leírt megoldás (
y = [i[0] for i in selection]
) errort dob.[ Szerkesztve ]
hitler, sztálin, micro usb
-
sztanozs
veterán
át kell alapkítani a tuple-listté és úgy meg kell egye:
self.clsmedialist[list(selection)]
vagy konkrétan hogy néz ki a selection változó?
[ 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...
-
moseras
tag
Hello,
> selection egy tuple ez pl (1, 6)
> (y = [i[0] for i in selection]
) errort dob.Ha selection egy tuple, akkor lehet selection[0], selection[1], stb. eleme. A for végigmegy a selection elemein, selection[0], selection[1], és így tovább, amennyi van. Ezt veszi fel az i.
De Te ennek az i-nek a 0.-ik elemét akarod, az pedig egy Int, konkrétan az 1-es szám, annak nincs 0.-ik eleme. Egy Int-nek nincs nulladik eleme.
> self.clsmedialist[selection]
Nem többdimenziós hozzáférést szeretnél ?
self.clsmedialist[selection[0]][selection[1]] ???
Szerintem python-ban nem lehet tuple-t beadni többdimenziós index-nek, sem vesszővel elválasztott Int-eket.
a[1,2] helyett a[1][2] kellene, nem ?
[ Szerkesztve ]
-
-
axioma
veterán
Azt az 1,6-t hogyan kell ertelmezni? Az 1. _es_ 6. elemet kered? Csak az 1.-t es a 6-os egy nem hasznalt adat? (az
i[0]
-t erolteto megoldasod lehet, hogy azt akarna, ha nalad konkretan egy darab tuple-bol allna a lista es a 0. elemet hasznalja ez a cucc, kerdes hogy a minta mennyire erre a konkret felhasznalasra szolt). Vagy 1-tol 6-ig (incl vagy excl)? Ha nem tudsz az input jelenteserol semmit, akkor tulkepp az egesz helyett beirhatod hogyselection[0]
es ha nem a kert eredmenyt adja majd lehet tovabbmenni. A masik tipp aselection[0]:selection[1]
ertelmezes, ha az tartomany-megjeloleskent erkezik. -
axioma
veterán
Ja, keresztposzt, akkor majdnem jo volt a listas megoldasod mint elv, csak mashogy kell alkalmazni (mert ott tuple-k listajabol emelte ki az elso elemet, te meg listabol akarod a tuple szerint cimzetteket):
selectedElements=[self.clsmedialist[idx] for idx in selection]
[ Szerkesztve ]
-
sztanozs
veterán
-
Siriusb
veterán
válasz sztanozs #2739 üzenetére
A tkinter felület olyan bűnronda, hogy amikor először megnéztem, azonnal menekültem. Pár hete észrevettem, hogy a wxwidget már megy python 3-mal, nosza feltelepítettem és elkezdtünk ismerkedni. Aztán rájöttem, hogy gtk3-ba van bedrótozva (Linux). Mivel amúgy is azt használtam, nem fogok még egy plusz layer-t használni.
-
atesss
addikt
Üdv !
Pár kicsi pl. indító-ellenőrző célú, illetve Raspberry GPIO bemenetet kezelő scriptet írtam vagy "összeollóztam" Pythonban már az elmúlt években, de nemrég kezdtem el komolyabban, úgymond teljes rendszerben is tanulni.
Eddig elsősorban C-t és AVR-C-t tanultam egyetemen + azt tovább magasabb szintre is hobby célból, de az elmúlt pár évben sajnos keveset használtam.
Most - a Python "alapok" tanulásával kb. párhuzamosan - a munkámhoz kapcsolódóan egy szabadulószobában használandó "üzenetrögzítő" játékelemet kezdtem el programozni Raspberry-re. GUI nem lesz erre a célra (sőt kijelző sem lesz rajta). Egyelőre python2-ben kezdtem el, de később majd biztos átváltom python3-ra.Elég sok része már működik is, de most egy területen elakadtam :
Hangfájlokat indítanék RFID-kártyák érzékelésére (nyelvenként kb. 5db fájl, kb. 10-25s, jelenleg wav). VLC-vel tenném, ezt azért is lenne célszerű, mert pl. omxplayer-el ellentétben elég könnyen átemelhető majd PC-s környezetbe is máshoz.
Első körben olyat csináltam, hogy minden egyes hangfájlhoz tartozik egy shell script amiben egy külön terminal-al indul egy teljes VLC player. A leállítást pedig os.system("pkill vlc") - vel csináltam.
A hangfájlok hosszát itt még egy külön config fájlból töltöm be
(az audio erősítőt is kapcsolom ennek függvényében).
Ugyan működik, de hát nem egy túl szép és erőforrás-gazdaságos megoldás...Az lenne a jó, ha nyelvváltáskor betölteném mind az 5db hangfájlt egy lejátszási listába,
és utána már csak abból dolgoznék.
Találtam is egy vlc-ctrl csomagot [link]
Ezt nagyon könnyű használni, de sajnos eléggé limitált, a dokumentációja meg nulla.
Eléggé körülményesnek tűnik vele akár csak egy lejátszási lista pl. adott elemére lépni.
Helyette az úgymond "hivatalos" VLC Python bindings-et lenne jobb használnom: [link]
Ez viszont bonyolultabb, már az indítással is bajban vagyok elsőre.
Nekem az jött le, hogy itt kb. az ablakot is nekem kellene létrehoznom.
Nem tudtok erre valamilyen elsőre is egyszerűbben használható megoldást ?[ Szerkesztve ]
-
sztanozs
veterán
-
atesss
addikt
válasz sztanozs #2743 üzenetére
A VLC esetében arra gondoltam, hogy az ezzel most megszerzett tapasztalatokat később majd kibővítve bonyolultabb projektekben is hasznosítani tudnám.
(Pl. van olyan tervem is, hogy majd egy saját, jól testreszabható, eseményvezérelhetőséget is tudó CCTV-kamerakép néző alkalmazást csinálnék, első körben szabadulószobák számára. VLC-vel, és elsősorban RTSP-vel.)
De mondjuk ez egy más volumenű projekt, lehet akkor mégsem most állnák neki a VLC vezérlésbe való beletanulásnak.Az mplayer-t úgy indítanám akkor Python-ból, hogy az minden lejátszáshoz létrehozna egy terminal ablakot (amit aztán be is zárna) ?
Vagy pedig ez nem szükséges ?Egy hátránya lehet még esetleg az mplayer-nek.
Azzal hogy "nem lesz GUI/képernyő" nem mondtam teljesen igazat.
Tervbe van egy olyan, hogy ugyanez a Raspberry párhuzamosan csinálna egy másik feladatot, egy TV-képernyőn való megjelenítést is (képcsöves a hely tematikája miatt, analóg CVBS-en). Ez elsősorban egy visszaszámláló (videofájl) lenne ami mindig fut, de külön-külön beküldött képek vagy rövid hangok/videók is lehetnének akár amik ezt rövid időre megszakítják.
Ez a terv persze későbbi, de a diktafon funkciót már most úgy csinálnám meg hogy ezzel ne ütközhessen.
A két külön alkalmazás hangjának fizikai elválasztását kétféleképpen is megoldhatom:
1. A sztereo egyik és másik csatornája. 2. Az egyik funkció a beépített hangkártyával megy, a másik pedig egy I2S-es kis erősítővel.
(Illetve 3. USB-s hangkártya, bár ezzel elektronikailag rossz tapasztaltaim vannak (áthallás), úgyhogy ezt kerülném. 4. relé a hangjelre, de ezt is kerülném.)
Ezt a TV-s megjelenítést a Pi Presents [link] vezérlésével/testreszabásával terveztem megcsinálni.
Az hogy más fut GUI-val a háttérben, nem probléma, mert átrakom a PiPresents-et Alwas On Top-ra.
De viszont ez a toolkit az audio fájlok lejátszását mplayer-el csinálja, legalábbis alapból.[ Szerkesztve ]
-
atesss
addikt
válasz justmemory #2746 üzenetére
Most próbálgatom az mplayer-t.
Egy dolog ezzel az indítással viszont már elsőre kijött mint probléma:
Így a főprogram futása megakad, amíg fut az mplayer.
Hogy ne így legyen, ahhoz subprocess-ként kellene indítanom ?
Úgy viszont onnantól meg kicsit nehezebb lesz kézbentartani a futását. (Nem kapok közvetlen visszajelzést mikor végzett, azt is nehezebben tudhatom meg épp hol tart a lejátszással, nehezebb instant leállítani, stb.)
Hogy ezek is működjenek megbízhatóan, ahhoz jól gondom hogy legelőször is a process ID-t kellene lementenem akkor amikor indítom ? -
justmemory
senior tag
A
thread()
szolgál arra, hogy egyszerre több szál fusson a progin belül - ha erre gondolsz, mint subprocess, akkor igen, úgy kellene indítani szerintem. Arról tudsz akár visszajelzést is kapni, ha leáll/lefut. Nem feltétlenül kell a process ID-t elmenteni, meghívhatod apidof
-ot (mint bash parancs); ezzel annyi gond van, hogy ha mondjuk több mplayer is fut egyszerre, akkor nehezen fogod tudni, hogy melyik melyik (csak mondjuk ha az indítás után rögtön futtatod a pidof-ot és kizárásos alapon eltárolod az azonosítót). De ennek ismeretében is, meg a thread kezelésénél is kvázi bármikor leállíthatod. Az, hogy éppen hol tart a lejátszásnál... Hát igen, nehezebben fogod tudni; annyira nem ástam bele magam, hogy van-e mplayer-hez esetleg python modul vagy simán bash-al ki lehet-e szedni belőle, hogy éppen hol tart. Ha utóbbit lehet, akkor elvileg arra is tudszos.system
hívást csinálni.[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
atesss
addikt
válasz justmemory #2748 üzenetére
Subprocess-re én akkor még nem így gondoltam. De utánanéztem, és így kellene, igen.
Csak ez így már összességében azért bonyolultabb."Nem feltétlenül kell a process ID-t elmenteni, meghívhatod a pidof-ot "
Ami tulajdonképpen azt csinálja, nem ?Jelenleg eddig jutottam:
import threading
def mplayer(Patch):
startcommand = 'mplayer ' + Patch
os.system(startcommand)
return
threads = []
WavPathname = '/home/pi/ ... _HU_1.wav'
mplayerThread = threading.Thread(target=mplayer, args=(WavPathname,))
threads.append(mplayerThread)
mplayerThread.start()
os.system("pidof mplayer")
mplayer_pid = subprocess.check_output(["pidof", "mplayer"])
print "A futo mplayer folyamatazonositoja: " + str(mplayer_pid)
Ami hátrány, hogy most kétszer íródik ki a PID a terminal-ban.
Olvastam [link] hogy Python 3 alatt már van valami más megoldás is erre, de még nem váltottam át rá.[ Szerkesztve ]
-
justmemory
senior tag
"Nem feltétlenül kell a process ID-t elmenteni, meghívhatod a pidof-ot "
Ami tulajdonképpen azt csinálja, nem ?
De, igen... Én arra gondoltam elsőre, hogy nem kell az elején elmenteni, mert utólag is le tudod kérdezni.Ami hátrány, hogy most kétszer íródik ki a PID a terminal-ban.
Kíváncsiságból lefuttattam nálam is (2.7.3-as Python), csak annyit és csakis annyit ír ki a terminál, hogy A futo mplayer folyamatazonositoja: 17774. Tehát amit kell...--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
Új hozzászólás Aktív témák
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest