Python2 staat al 15 jaar stil. Sinds 2020 ook geen security-updates meer.
Als je python default naar python2 laat wijzen moet je wel weten wat je aan het doen bent.
RaspberryPI's komen sinds 2021 met enkel python3, en default geen python2.
Wat natuurlijk niet betekend dat het script van TS voor python3 gemaakt is! (denk het niet, print zonder haakjes is heel erg python2).
De oplossing is dan natuurlijk het script updated, en niet toch python2 installeren. Zeker voor zo'n kort scriptje.
Maar dan moet de TS wel het script netjes tussen code-tags plaatsen. Of een link naar het origineel....
Is de code overgetikt?
Ook python2 heeft geen 'z' mode voor open().
Afijn, maak van die 'z' maar een 'r'
Enne, installeer Putty of zo op je computer, dan kun je normaal met ssh verbinden met je Raspberry.
En copy-paste gebruiken, geeft minder tikfouten 
Die foutmelding komt waarschijnlijk doordat je een functie aanroept uit een library met argumenten die nu niet meer ondersteund worden.
Dat komt doordat de versie van die api of library op jouw raspberry waarschijnlijk niet dezelfde is als waar dit script ooit voor is geschreven.
Je moet de docs van jouw api opzoeken om te kijken wat er vandaag de dag nodig is. Blurp heeft dat laatste al gedaan vermoed ik.
Oja en vergeet niet om Aart te bedanken voor de conversie van je .heic files 
De code is te slecht om tijd aan te besteden
#!/bin/bash
echo out > /sys/class/gpio/gpio21/direction
while :
do
temp=`cat /sys/class/thermal/thermal_zone0/temp`
fan=0
[ $temp -gt 52000 ] && fan=1
echo Temp: $temp Fan: $fan
echo $fan > /sys/class/gpio/gpio21/value
sleep 5
done
In bestandje zetten en starten met "bash bestandsnaam".
52000 = 52 graden. -gt x && is een korte variant voor 'if greater than x then'
Op 14 april 2023 21:54:57 schreef K7Jz:
De code is te slecht om tijd aan te besteden
Doch is 100x beter gedocumenteerd dan het shell script dat jij net post.
Ik geef direct toe dat ik beter ben in Python dan in Bash, maar ik denk niet dat TS gebaat is bij weer een andere oplossing.
Ik weet wel zeker dat het makkelijker is om in Python leesbare code te schrijven dan in Bash. (En dat je in iedere taal onleesbare code kunt schrijven)
[ $temp -gt 52000 ] && fan=1
Wat een heel goed voorbeeld van onleesbaarheid is, ook al is het correct (en voor bash-golf experts waarschijnlijk ook heel duidelijk)
[Bericht gewijzigd door blurp op (18%)]
Paulinha_B
Honourable Member
"Ik spreek Spaans tegen God, Italiaans tegen de vrouwen, Frans tegen mannen en Duits tegen mijn paard." Dixit Carlos V, Römisch-deutscher Kaiser
Hehe, helemaal akkoord, @blurp!
De bash-code proeft naar unix van 30-40 jaar geleden, toen we alleen maar bourne shell aka sh hadden (en het exotisme csh waar ik altijd vies van ben geweest).
Zo kan men de leesbaarheid flink verbeteren door
[ $temp -gt 52000 ] && fan=1 te vervangen door
if [[ $temp -gt 52000 ]] ; then fan=1 ; fi Op 15 april 2023 11:38:15 schreef Paulinha_B:
De bash-code proeft naar unix van 30-40 jaar geleden,
He, op Unix gebruikten we sh, bash is de gepimpte versie voor Linux-weenies 
Zo kan men de leesbaarheid flink verbeteren door
[ $temp -gt 52000 ] && fan=1te vervangen door
if [[ $temp -gt 52000 ]] ; then fan=1 ; fi
if [[ $temp -gt 52000 ]] ; then
fan=1 ;
fi
of:
if (temp > 5200) then
fan =1

Maar we dwalen af
Ik zat in een vi shell op de mobiel vandaar mijn beknopte code.
Het voordeel van bash is dat het onafhankelijk is van eventuele libraries.
Je maakt overigens een typefout in je laatste snippet 
Op 15 april 2023 15:00:58 schreef K7Jz:
Je maakt overigens een typefout in je laatste snippet
Klopt, moet zijn
if (temp>5200) :
fan = 1
Python is min of meer standaard. Het enige serieuze OS dat niet standaard met een python interpreter komt is Windows, en dat heeft ook geen bash.
In dit geval heb je het over code die gebruikt maar van /sys/class/thermal/thermal_zone0/temp , en dat bind het toch wel redelijk sterk aan een Raspberry met Raspbian. En als dat al een gegeven is, is aanwezigheid van python ook gegeven.
Paulinha_B
Honourable Member
"Ik spreek Spaans tegen God, Italiaans tegen de vrouwen, Frans tegen mannen en Duits tegen mijn paard." Dixit Carlos V, Römisch-deutscher Kaiser
... en misschien ook 52000 ipv 5200 
(sorry voor de haarklieverij, maar als we dan toch bezig zijn...)
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op 15 april 2023 15:13:22 schreef blurp:
Python is min of meer standaard.
Dat was leuk totdat ze van Python2 naar Python3 ineens zoveel veranderden dat vrijwel NIETS meer zonder aanpassingen werkt. Da's net zo vervelend als een library probleem.
Op 15 april 2023 11:42:11 schreef blurp:
He, op Unix gebruikten we sh, bash is de gepimpte versie voor Linux-weenies
Voglens mij hadden we al bash in 1990 op de Unix computers. Ook was er iemand die perse "zsh" moest hebben. Dat ook maar geinstalleerd. Maar goed. Bash is kut. 
Het enige serieuze OS dat niet standaard met een python interpreter komt is Windows, en dat heeft ook geen bash
Zonder meteen de Linux-Windows discussie in te willen duiken, vanaf Windows 10 heeft het een "Linux subsystem"
What is Windows 10 subsystem for Linux?
The Windows Subsystem for Linux (WSL) lets developers install a Linux distribution (such as Ubuntu, OpenSUSE, Kali, Debian, Arch Linux, etc) and use Linux applications, utilities, and Bash command-line tools directly on Windows, unmodified, without the overhead of a traditional virtual machine or dualboot setup
Paulinha_B
Honourable Member
"Ik spreek Spaans tegen God, Italiaans tegen de vrouwen, Frans tegen mannen en Duits tegen mijn paard." Dixit Carlos V, Römisch-deutscher Kaiser
Sorry Bram, maar dat is toch niet relevant? Het punt is dat er in Windows geen python inzit, van huis uit. De mogelijkheid om een soort Linux-emulator te installeren verandert daar niets aan.
.
[Bericht gewijzigd door bprosman op (100%)]
Op 15 april 2023 15:51:40 schreef Paulinha_B:
Sorry Bram, maar dat is toch niet relevant? Het punt is dat er in Windows geen python inzit, van huis uit. De mogelijkheid om een soort Linux-emulator te installeren verandert daar niets aan.
In Linux ook niet altijd, "Python is available on MOST distributions", anders is het een losse installatie net als op Window.
Maar het was ook een reactie op deze opmerking :
Het enige serieuze OS dat niet standaard met een python interpreter komt is Windows, en dat heeft ook geen bash.
Overigens is het geen "Linux emulator" maar gewoon native Linux.
Windows heeft "Powershell" , zeker zo krachtig als Python.
[Bericht gewijzigd door bprosman op (10%)]
Paulinha_B
Honourable Member
"Ik spreek Spaans tegen God, Italiaans tegen de vrouwen, Frans tegen mannen en Duits tegen mijn paard." Dixit Carlos V, Römisch-deutscher Kaiser
Ik ga er maar niet verder op in, er is me altijd geleerd om niet te proberen discuteren met Windows-verdedigers...
Terug naar de openingsvraag: we lijken intussen akkoord te zijn dat het hele probleem erin zit dat er python3 wordt losgelaten op code die bedoeld is voor een eerdere versie. Het installeren van die eerdere versie zou een mogelijkheid zijn, maar heeft stevige nadelen, het zou een achteruitgang zijn. Dus is er voor de topicstarter maar een goede oplossing: de code aanpassen totdat hij werkt onder python3. Mits het posten van fatsoenlijke berichten kan zij/hij daar volop hulp voor krijgen.
Ik ben iets vlotter met bash, daarom mijn keuze en puur als script om TS te helpen, niet als perfect gedocumenteerd meesterwerk.
Aangezien het probleem feitelijk de behandeling twee virtuele tekstbestanden van enkele karakters is lijkt bash me prima van toepassing.
Wil je een multidimensionale array van 50 MB analyseren en dan als mooie PDF document rapporteren dan ga je al snel naar Python of iets anders. Net als een webformulier lekker snel in php kan maar een internetbanksite liever in java.
Paulinha_B
Honourable Member
"Ik spreek Spaans tegen God, Italiaans tegen de vrouwen, Frans tegen mannen en Duits tegen mijn paard." Dixit Carlos V, Römisch-deutscher Kaiser
Tsja, daar is wel iets van aan, de taak is zo triviaal dat er zelfs geen awk aan te pas kwam, zelfs nog geen grep 
Alleen was de vraag nu eenmaal naar hulp met python-code.
En misschien iets zinnigs voor de TS.
Die moet zijn kleine bestandje even overschrijven naar pyton3 formaat om het te laten werken. Als de TS gewoon die code hier had gepost dan had iemand hier dat waarschijnlijk zelfs al voor hem gedaan en had had het al gewerkt bij de TS. Dus geen schermfoto's meer.
Verder geen HEIC bestanden posten. HEIC is van dat aangevreten fruit merk. Dat is behalve kwalitatief goed ook een soort van secte. Alleen als je je digitale ziel met huid en haar overleverd aan die mensen mag je mee doen.
Dat is een van de redenen dat alleen aangevreten fruitleden dat heic spul kunnen lezen. Er zit zoveel aan rechten en licenties op die coders en docoders dat de meeste gangbare grafische software dit niet kunnen lezen, schrijven of omzetten. Je moet altijd iets moeilijks doen om het te kunnen lezen.
Open software is niet beter dan apple ofzo. Maar wel altijd voor iedereen leesbaar. Apple is alleen leesbaar voor leden en de amerikaanse geheime dienst.
henri62
1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Op 15 april 2023 11:30:47 schreef blurp:
[...]Doch is 100x beter gedocumenteerd dan het shell script dat jij net post.
Ach het is allebei ellende/niks.
In het shell script mis ik de export van de GPIO pin ook nog eens.
Nergens geen commentaar, maar in het python script staan ook maar 5 regels comment, waarvan er 2 onnodig zijn, dus 100x beter klopt ook niet want 100 * 0 is nog steeds nul. Dan had je er helemaal geen commentaar in moeten zetten, dan is de bewering juist. 
Verder gebruik gewoon sh (stelletje bash junkies).
python:
fan.off -> voor de while loop: duplicate code, nergens voor nodig. (DRY)
is_close -> variable slaat nergens op, moet is_fan_off zijn of zo.
De hele constructie met is_close is nergens voor nodig.
En het commentaar wat erbij staat (# upper bound..) kun je net zo goed weglaten want er staat al 2 keer onder wat het doet.
Na die open(... moet er geen close bij? Of heb je nu een file-handle leak.
Paulinha_B
Honourable Member
"Ik spreek Spaans tegen God, Italiaans tegen de vrouwen, Frans tegen mannen en Duits tegen mijn paard." Dixit Carlos V, Römisch-deutscher Kaiser
gebruik gewoon sh
O ja. En ga "gewoon" met paard en kar naar de bakker.
Toevoeging: en wat is het verband tussen de kwaliteit van de code en de hoeveelheid commentaar? Ik heb altijd geleerd mijn code zo netjes en duidelijk te schrijven dat er geen commentaar nodig is. Of toch zo weinig mogelijk. Een vroege werkgever van me zei ooit "ik betaal u om programma's te schrijven, niet voor romans" en hij had daar wel een punt, vind ik nu.
[Bericht gewijzigd door Paulinha_B op (67%)]
Op 15 april 2023 22:27:04 schreef henri62:
Na die open(... moet er geen close bij? Of heb je nu een file-handle leak.
Die file-handle is locaal gescoped, dus de garbage collector ruimt hem op.
Dat kun je smerig vinden, maar een holy war over garbage collection is net zoiets als sh vs bash, windows vs unox, vi vs emacs.
Geef mij de popcorn even door asjeblieft...
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op 15 april 2023 17:01:17 schreef Paulinha_B:
Het installeren van die eerdere versie zou een mogelijkheid zijn, maar heeft stevige nadelen, het zou een achteruitgang zijn.
Python2 installeren moet gewoon kunnen. Bovenaan zet je dan #!/usr/bin/python2
en de /usr/bin/python laat je gewoon naar python3 blijven wijzen.
(de meeste Linux-installatie programmas zouden best wel eens als je pyton3 HEBT maar python2 installeert de boel kunnen omzetten. )
Op 16 april 2023 12:21:23 schreef rew:
Bovenaan zet je dan #!/usr/bin/python2
Dat is sowieso het advies vanuit Python (of "Best practice" zo je wil), om van ieder pythonscript expliciet te maken welke python versie ze gebruiken.
Maar volgens mij was het enige python2 in TS zijn script de print zonder (), en die is er nu uit.
De spelfout met open (open (<filename>,"z") was gewoon een spelfout, geen enkele versie van python heeft ooit een "z" op die plek gehad (net als C trouwens, het is gewoon de open() call die in iedere C library zit)
Dus de makkelijkste optie is het gewoon aanpassen aan python3.