Wie kann man bei Pyscript eine Konsole simulieren?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet
(...) und man kann auch nicht den Output mit print("output") sehen.

Das scheint ein Bug zu sein. Wenn du print außerhalb einer Funktion verwendest, wird die Ausgabe getätigt.

Ich hab dann mal ein Beispielscript gefunden, aber das funktioniert nur 1.

Der Inhalt des Ausgabeelements wird ständig überschrieben. Richtig wäre es stattdessen, neue Daten nur anzuhängen.

from js import console

def convert_to_html(text):
  return text.replace("[[", "<").replace("]]", ">")

def my_function(*args, **kwargs):
  text = Element("test-input").element.value
  Element("test-output").write(convert_to_html(text + "[[br]]"), True)

Das boolsche Argument für die write-Funktion gibt an, dass die Daten angehängt werden sollen. Die convert_to_html-Funktion ist ein notwendiger Workaround, da PyScript den Code vor Ausführung wohl HTML-dekodiert (lies dazu auch hier).

Außerdem wäre es besser, wenn man auch mit ENTER den Befehl ausführen kann (...)

Seitens PyScript gibt es wohl noch keinen Support für Key Events, jedenfalls habe ich in der Dokumentation dazu nichts gesehen.

Folglich eine Lösung mit JavaScript:

<script>
  const button = document.getElementById("submit-button");
  document.getElementById("test-input").addEventListener("keypress", evt => {
    if (evt.key === "Enter") {
      evt.preventDefault();
      button.click();
    }
  });
</script>

Zweifellos wäre es schöner, sich stattdessen direkt an my_function zu hängen. Dazu bräuchte man allerdings erst einmal eine Referenz auf die Funktion, die bei PyScript aus dem Python-Code generiert wird. Du müsstest dich genauer mit dem Code von PyScript auseinandersetzen, um in Erfahrung zu bringen, was da intern gemacht wird. Entweder landet die Funktion in einem Sammelbecken o.ä., wo du sie mit externen JavaScript herausgreifen kannst oder eine Referenzierung ist gar nicht möglich.

(...) und dass man auch das "Textfeld_1" als Anweisung umschreiben kann (was man in dem Feld eingeben soll) (...)

Eine direkte Beschriftung des Eingabefelds sollte über ein Label stattfinden, nicht über ein div, welches keine Beziehung zum Feld aufbauen kann.

<label for="test-input">Deine Eingabe:</label>
<input id="test-input">

Welche Beschriftung du für das Feld nun wählst, ist dir überlassen.

Ebenso kann man einen Platzhaltertext in das Feld setzen:

<input id="test-input" placeholder="Tippe hier">
Wie kann man bei Pyscript eine Konsole simulieren?

Ich würde dir ehrlich gesagt von PyScript abraten. Bereits bei diesem einfachen Anwendungsfall stößt man noch auf zu viele Probleme. Hinzu kommt die zu große Ladezeit, bevor auch nur eine Zeile des Codes tatsächlich ausgeführt wurde.

Wenn ein so großes Interesse an PyScript besteht, würde ich mir eher überlegen, einen eigenen Fork des Projekts zu erstellen und auf diesem dann das Projekt mit JavaScript selbst weiterzuentwickeln.

Hanibal545 
Fragesteller
 12.09.2022, 22:23

Vielen Dank für deine ausführliche Antwort

0