Inicie uma sessão interativa no gnuplot e execute alguns comandos quando abrir

2

Quando executo meu script, ele deve

  1. Abra um terminal com o gnuplot (sessão interativa)
  2. Execute alguns comandos do gnuplot.
  3. A sessão interativa permanece aberta. (usuário pode executar comandos)

Eu tentei o -e flag que executa o código, mas o terminal é fechado e não é interativo.

A bandeira -p permite que a janela de plotagem sobreviva, o que é menor do que o necessário.

Eu também tentei carregar um script do gnuplot no -e -flag, esperando que isso inicie uma sessão interativa, mas sem sucesso.

Minha solução atual é enviar pressionamentos de tecla usando xte , o que funciona, mas é um pouco hacky. Existem melhores soluções?

    
por Gilles Castel 04.07.2016 / 20:44

3 respostas

0

O seguinte script fará o que você está perguntando como eu o entendo. Ele executará uma seqüência de comandos do gnuplot de forma não interativa e continuará a mesma sessão do gnuplot a partir da linha de comando. Os comentários no script indicam onde você deve colocar os comandos não interativos.

#!/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 

Notas:

  1. O método que eu uso para emular o prompt do gnuplot é um hack rápido que pode, sem dúvida, ser melhorado e, na verdade, é completamente desnecessário.

  2. Se não for isso que você está tentando fazer, forneça os comandos que você está executando (tentei) no terminal, bem como um trecho suficiente do script do gnuplot que você está chamando.

  3. Para melhorar, veja os canais nomeados . Se você quiser manter um script como este para uso a longo prazo, eu iria por esse caminho por razões de manutenibilidade. Este script está obtendo um resultado muito semelhante com métodos de força mais "brutos".

    Por exemplo, estou usando o stderr para coisas que não vão para o gnuplot como uma conveniência - o prompt, a informação do comando quit. Essas seriam melhor tratadas com um pipe nomeado.

por 05.07.2016 / 07:51
0

Se você está em um sistema * nix (estou usando o Linux), então tudo parece um arquivo, o que significa que podemos ler nossa sessão de terminal atual como se pudéssemos um arquivo normal.

Eu coloquei o seguinte no final do meu script do gnuplot para obter o nome do meu terminal, e 'carregue' como você faria com um script normal:

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

Você não recebe nenhum aviso dessa maneira, mas está funcionando bem para meus propósitos. Você pode continuar digitando no terminal; pressionando Enter (ou Return , ou seja qual for a sua chave de fim de linha) irá enviar a linha para a sessão do gnuplot. Ctrl + D sairá da sessão normalmente.

    
por 23.03.2018 / 20:32
0
gnuplot -e "print 'here I am'" -

deve funcionar

    
por 15.05.2018 / 21:25