Serial module en Json

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • herman0805
  • Registratie: Januari 2023
  • Laatst online: 03-02-2023
ik heb volgende probleem:
Python script dat aangeroepen wordt via een PHP bestand (beide zijn eenvoudige test bestandjes)


python script:
#import serial
import json
D = "dit is een string"
print ("op scherm")
print()
print (json.dumps(D))
...
PHP bestand
<?php
$command = escapeshellcmd("python /var/www/html/test/var.py");
$output = shell_exec($command);
echo $output."<br>";
echo "php_works";
?>

Als ik het Python bestand op de server uitvoer werkt het zoals voorzien
------------------------------------------------------
xxx@pi:/var/www/html/test $ python var.py
op scherm

"dit is een string"
--------------------------------------------------------

In de browser komt echter op het scherm het volgende:
----------------------------------
op scherm "dit is een string"
php_works
-------------------------------
Waarom wordt die "new line" niet geprint?

Het grootste probleem zit hem echter bij de module serial.
Als ik de commentaar voor de "import serial" in het python bestand weg haal komt er niets meer in de browser.
---------------

php_works
-----------------

Wat kan hier het probleem zijn?
Python versie: 3.9.2
heb op de server ook al volgende gedaan
pip3 uninstall serial
pip3 uninstall pyserial
pip3 install pyserial

Wie kan helpen?

Dank u
Herman
...

Alle reacties


Acties:
  • 0 Henk 'm!

  • Ryanirin
  • Registratie: Maart 2012
  • Niet online
De reden dat je de linebreaks niet zit is vermoed ik omdat html break-tags verwacht, en geen \n. Probeer je $output is tussen <pre> tags te zetten, en kijk of je de linebreaks wel ziet.

Waarom je pythonscript niet werkt met de import serial regel niet gecomment durf ik niet te zeggen, vermoedelijk omdat hij de module niet kan importeren en een error geeft? Werkt het op de commandline wel?

Acties:
  • 0 Henk 'm!

  • herman0805
  • Registratie: Januari 2023
  • Laatst online: 03-02-2023
Dank voor de respons,
Via de commandline werkt alles zoals voorzien. Ben intussen iets verder en heb volgende gevonden.
------------------------
ModuleNotFoundError: No module named 'serial'
php_works
----------------------
Dit krijg ik nu (via de optie $command = exec("python /var/www/html/test/var.py 2>&1"); )
Zet ik de "import serial" in commentaar werkt het wel. Dus waarom wil PHP niet (onrechtstreeks) die module serial laden wat via het script op de server wel gebeurd? De module "import json" doet die wel.
Herman

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:21

Janoz

Moderator Devschuur®

!litemod

Zeer waarschijnlijk komt dat omdat het script vanuit php onder een andere gebruiker, en dus ook andere python omgeving draait. Als je ipv het python script eens 'whoami' uitvoert is dat denk ik wel te zien.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 14-09 17:58

Matis

Rubber Rocket

Ja, of draai export of env. Dan kun je vergelijken hoe de omgeving van je PHP-gebruiker er uit ziet en hoe de omgeving van je gewone gebruiker er uit ziet.

Grote kans dat de module serial in de home directory van de gebruiker geïnstalleerd staat en daar kan de php / www-data gebruiker niet bij.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 13:26
De module serial is geen standaard python module dus die kan hij niet vinden en crashed dus op die regel.

Wat wil je met die module serial, die is bedoelt om com poorten te lezen.
Als je die nodig hebt moet je die module eerst toevoegen aan je python omgeven met behulp van pip.

En een linebreak in html is <br> en geen \n daar snap hij niets van

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.


Acties:
  • 0 Henk 'm!

  • herman0805
  • Registratie: Januari 2023
  • Laatst online: 03-02-2023
Het is intussen opgelost.
Had de install gedaan als user en niet als sudo, daardoor staan de modules in een local directory en niet in de algemene directory waar Python en de rest van de modules staan.
Allemaal bedankt voor de hulp.
Pagina: 1