Starten Sie eine interaktive Sitzung in gnuplot und führen Sie beim Öffnen einige Befehle aus

848
Gilles Castel

Wenn ich mein Skript ausführte, sollte es

  1. Terminal mit gnuplot öffnen (interaktive Sitzung)
  2. Führen Sie einige gnuplot-Befehle aus.
  3. Die interaktive Sitzung bleibt geöffnet. (Benutzer kann Befehle ausführen)

Ich habe das -eFlag ausprobiert, das Code ausführt, aber das Terminal wird geschlossen und ist nicht interaktiv.

Die -pFlagge lässt das Plot-Fenster überleben, was weniger ist als ich brauche.

Ich habe auch versucht, ein gnuplot-Skript in der -e-flag zu laden, in der Hoffnung, dass dadurch eine interaktive Sitzung gestartet wird, jedoch ohne Erfolg.


Meine derzeitige Problemumgehung ist das Senden von Tastatureingaben xte. Dies funktioniert zwar, ist jedoch etwas hackig. Gibt es bessere Lösungen?

2

3 Antworten auf die Frage

0
Argonauts

Das folgende Skript wird tun, was Sie fragen, wenn ich es verstehe. Es wird eine Folge von gnuplot-Befehlen nicht interaktiv ausführen und dann dieselbe gnuplot-Sitzung von der Befehlszeile aus fortsetzen. Die Kommentare im Skript geben an, wo Sie die nicht interaktiven Befehle einfügen sollten.

#!/bin/bash -   # Cheap 'trick' to show gnuplot prompt # There are better ways prmpt () { (echo -n "gnuplot> " >&2) }  # Function that serves as a pipe to gnuplot;  # non-interactively then interactively gnuplotInPipe () { # simple example from http://gnuplot.sourceforge.net/demo/simple.html # All non interactive stuff goes here: echo "set title \"Simple Plots\" font \",20\"" echo "set key left box" echo "set samples 50" echo "set style data points" echo "plot [-10:10] sin(x),atan(x),cos(atan(x))" # end of non-interactive gnuplot commands (echo "Type 'quit' to exit" >&2) prmpt  # Here we read in lines (terminated with newline) # and pipe them directly to the same gnuplot # session while true; do read -er cmd if [ "$cmd" == 'quit' ]; then break fi echo "$cmd" prmpt  done }  # Call gnuplotInPipe and pipe it's output # to gnuplot gnuplotInPipe | gnuplot  

Anmerkungen:

  1. Die Methode, die ich zum Emulieren der Gnuplot-Eingabeaufforderung verwende, ist ein schneller Hack, der zweifellos verbessert werden kann und eigentlich völlig unnötig ist.

  2. Wenn dies nicht das ist, was Sie versuchen zu tun, geben Sie bitte die Befehle an, die Sie vom Terminal ausführen (versucht haben), sowie einen ausreichenden Auszug des gnuplot-Skripts, das Sie aufrufen.

  3. Um dies zu verbessern, werfen Sie einen Blick auf Named Pipes . Wenn Sie ein Skript wie dieses für die langfristige Verwendung verwalten möchten, gehe ich aus Gründen der Wartbarkeit diesen Weg. Dieses Skript erzielt ein sehr ähnliches Ergebnis mit mehr "rohen" Force-Methoden.

    Zum Beispiel verwende ich stderr für Dinge, die nicht zur Bequemlichkeit gnuplot werden - die Eingabeaufforderung, der Befehl zum Beenden des Befehls. Diese würden besser mit einer Named Pipe gehandhabt.

Großartig! Das war genau das, was ich wollte und weniger hackig als das, was ich hatte. Gilles Castel vor 7 Jahren 0
0
sputnick1124

Wenn Sie sich auf einem * nix-System befinden (ich verwende Linux), sieht alles wie eine Datei aus, was bedeutet, dass wir unsere aktuelle Terminalsitzung genau wie eine normale Datei lesen können.

Ich habe am Ende meines gnuplot-Skripts Folgendes eingefügt, um den Namen meines Terminals zu erhalten und es wie ein normales Skript zu "laden":

set title 'Interactive session' plot 'mydata.dat' ︙ etc ︙ tty=system("tty") # execute the command "tty" in OS and store output load tty # load the tty like a file 

Sie erhalten auf diese Weise keine Eingabeaufforderung, aber es funktioniert gut für meine Zwecke. Sie können das Terminal weiter eingeben. Durch Schlagen Enter (oder wie Returnauch immer Ihre Zeilenende-Taste aufgerufen wird) wird die Leitung an die gnuplot-Sitzung gesendet.  Ctrl+ beendet Ddie Sitzung wie gewohnt.

0
bibi
gnuplot -e "print 'here I am'" - 

sollte arbeiten