Python 3 in den Ubuntuprozessen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Furbynat0r
User
Beiträge: 17
Registriert: Dienstag 27. Februar 2018, 09:43

Moinsen Leute,

ich bin etwas am verzweifeln....

Code: Alles auswählen

#!/usr/bin/env python3

x = 1

while x < 5000:
 print(x)
 x = x+1
Ich habe hier ein Script das bis 5000 hochzählt... soweit nichts wildes.
Dies ist ein Testscript, da ich den Prozess in Ubuntu beobachten möchte.

Solang dieses Script läuft müsste ich doch einen Python3 Prozess in Ubunut unter "ps -all" sehen, oder?
Wenn ja, wieso dann nicht bei mir? :D

Habt ihr Anhaltspunkte an was das liegen kann?

Gruß,
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Furbynat0r: das Skript dürfte so schnell fertig sein, dass Du das nicht beobachten kannst.
Furbynat0r
User
Beiträge: 17
Registriert: Dienstag 27. Februar 2018, 09:43

Stimmt... hab das Script mit Dauerschleife umgeschrieben und dann wird es sichtbar :D ... man man man.... Danke dafür

Ich möchte via php ein python script ausführen....

Dafür habe ich folgende php:

Code: Alles auswählen

exec("python3 ordner.py");
Meine Idee ist, das ich über einen Button auf der Homepage, das Script ausführen kann. Dieses Script läuft zwar dann erstmal in Dauerschleife, aber dann sollte ich es in "ps -all" sehen oder?

Denn das klappt leider auch nicht... entweder es wird nichts angezeigt bei ps-all oder der Webserver meldet nach klicken auf den Button einen 504 Gateway Time-Out :/ .
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

bist du sicher, dass die Pfade stimmen, wenn du es so aufrufst? Normalerweise ist es besser, sowohl für den Python-Interpreter als auch das Skript absolute Pfade anzugeben.
Bist du sicher, dass die Rechte, mit denen PHP läuft, reichen, Python und das Skript auszuführen? Zu dieser Thematik gibt es bergeweise Threads in diversen Foren, wie wo was zu ändern ist.

PHP und Python spielen so wie so nicht gut zusammen. Besser ist, wenn du alles in Python machst, auch den Webteil. Dann kann serverseitiges Python auch das Python-Skript direkt aufrufen oder in einem Thread starten oder ...

Warum bist du eigentlich so scharf darauf, dass den Prozess in der Prozessliste zu sehen?

Gruß, noisefloor
Furbynat0r
User
Beiträge: 17
Registriert: Dienstag 27. Februar 2018, 09:43

Mein Plan ist es, das der User seine Daten über die Seite eingibt, diese an ein Pythonscript übergeben werden und dieses Pythonscripts startet dann mit diesen Daten.

Den Prozess wollte ich fürs erste nur sehen damit ich beobachten kann, ob das Script gestartet wird.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Furbynat0r: Du mußt das Skript dann schon auch im Hintergrund starten, sonst bricht es nach einem Timeout einfach ab.
Furbynat0r
User
Beiträge: 17
Registriert: Dienstag 27. Februar 2018, 09:43

Danke, hab die Zeile entsprechend erweitert. :)

Hm schade das PHP und python da nicht so zusammen passen :/

Der Code schaut nun so aus

Code: Alles auswählen

  <html>
  <head>
  </head>
  <body>

    <form action="index.php" method="post">
    <form>
      Username:: <br>
      <input type="text" name="name"><br>
      Username: <br>
      <input type="password" name="password"><br>
      <input type="submit" name "Submit"><br>
      
  </html>
  
<?php
$name  = $_POST["name"];
$name2 = $_POST["password"];


$handle = fopen ("daten.txt", w);
fwrite ($handle, $name."\r");
fwrite ($handle, $name2);
fclose ($handle);

shell_exec("/usr/bin/python3 /var/www/vhosts/xxx/httpdocs/xxx/user1/ordner.py &");

?>

Und beim Absenden merke ich das der Server länger braucht um die Abfrage zu vollziehen, aber auf dem Server taucht immernoch kein neuer Prozess auf :(
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn das Skript länger als ein paar Augenblicke zur Abarbeitung der Daten braucht, dann solltest du, wie Sirius3 schon sagst, das Skript in einem separatem Prozess oder Thread schon laufen haben und der Server übergibt die Daten über eine Queue oder eine Named Pipe an das Skript. Oder du nutzt eine asynchrone Job Queue wie Celery - aber das ist hier wohl "too much". Jedenfalls hast du so auch keine Probleme mit Timeouts durch lang andauernde Datenverarbeitung.
Wenn du den Server auch in Python (statt PHP umsetzt), dann ist das auch nicht weiter schwierig zu realisieren.
Hm schade das PHP und python da nicht so zusammen passen
Hm, eher schade, dass du PHP nutzen möchtest. Webprogrammierung ist mit Python schöner, einfacher, flexibler.

Gruß, noisefloor
Antworten