Kabuk betiğini kullanarak gnuplot'ta komutlar nasıl çalıştırılır?


10

Ne yapmak istiyorum ilk bir programı başlatır ve daha sonra komutları bir demet yürütmek ve sonra çıkmak söyler bir komut dosyası yazmaktır. Bir örnek verelim.

Bu senaryoyu yazdım myscript.shve istediğim gibi çalışmıyor. Yaptığı şey sadece gnuplot çalıştırmak ve çıkmak için bekleyin ve sonra diğer komutları çalıştırır; açıkçası hatalar üretir.

#!/bin/bash
gnuplot
plot sin(x)
pause -1
quit

Sanırım ne yapmaya çalıştığım çok açık; değilse, yorumlarda bana bildirin.

Yanıtlar:


12

Gönderen man gnuplotya da çevrimiçi manpage :

   -p,  --persist  lets  plot  windows  survive after main gnuplot program
   exits.

   -e "command list" executes the requested commands  before  loading  the
   next input file.

Muhtemelen çalıştırmak istediğiniz şey şu komuttur:

gnuplot -e "plot sin(x); pause -1"

Önerdiğim ancak faydalı olmayan diğer varyantlar:

gnuplot -p -e "plot sin(x); pause -1"
gnuplot -e "plot sin(x)"
gnuplot -p -e "plot sin(x)"

İlk 2 tam olarak istenen çıktıyı üretir. -pBu örnekte çok fazla kullanılmamasına rağmen ; terminalde enter tuşuna basarsanız, gnuplot çıkar ve çizim penceresi, quit komutu dışında tamamen etkileşimli olmaz. 3. çıktı sadece gelir ve gider (hiç görünmez). Sonuncusu çıktı üretir, ancak gnuplot hemen kapandığından, çizim penceresi tekrar etkileşimli değildir (ayrıca, 1 metrekarelik küçük bir çizim gösterir). Bu yüzden pause -1gereklidir.
Mihir Gadgil

@MihirGadgil Geri bildiriminiz için teşekkür ederiz. Cevabımı düzenledi.
Bayt Komutanı

16

Bunun bir yolu -persist:

#!/usr/bin/gnuplot -persist
set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
set timefmt "%y/%m/%d"
set xdata time
set pointsize 1
set terminal wxt  enhanced title "Walt's steps " persist raise
plot "/home/walt/var/Pedometer" using 1:2 with linespoints

başka bir yol, eğer verileri önişlemeniz gerekiyorsa, bir Bash ile Here Document(bkz. man bash):

#!/bin/bash
minval=0    # the result of some (omitted) calculation
maxval=4219   # ditto
gnuplot -persist <<-EOFMarker
    set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
    set timefmt "%y/%m/%d"
    set yrange $minval:$maxval
    set xdata time
    set pointsize 1
    set terminal wxt  enhanced title "Walt's steps " persist raise
    plot "/home/walt/var/Pedometer" using 1:2 with linespoints
EOFMarker
# rest of script, after gnuplot exits

1
Bu ("burada-doc" kabuk yöntemi) muhtemelen OP'nin aradığı genel cevaptır. expect
Komutla

Üstelik sizinle komut çalıştırılabilir yapabilir chmod u+x myscript.gnuve doğrudan yürütmek ./myscript.gnu Just unutur bir not []yrange içinde: set yrange [$minval:$maxval].
Hastur

3

Açıklandığı gibi mansayfalarda , gnuplotbir ne denir bir komut dosyasından girdi bekler toplu oturumu . Örneğin, satırı plot sin(x)bir dosyaya yazıp myplotyürütebilirsiniz gnuplot myplot.

Komut dosyasını atladığınız gibi komut dosyasını atlarsanız etkileşimli bir oturum alırsınız .


Tamam, bunu interaktif bir oturuma atladığını anlıyorum, ama aynı sctipt aracılığıyla bu interaktif oturuma komutları beslemenin bir yolu yok mu? Ayrıca, daha genel bir cevap verebilir misiniz (gnuplot'a özgü değil)? Teşekkürler!
Mihir Gadgil

Hayır, tüm uygulamalar girişi aynı şekilde işlemez. Bunu genellemenin bir yolu yok.
Jos

@MihirGadgil - tüm programlar aynı şekilde çalışmaz ... başka hangi programları kullanmak istersiniz?
Wilf

@Jos Oh, anlıyorum, teşekkürler! Wilf Geçmişte linux kullanmıştım ama çok fazla kullanmıyorum, şimdi daha fazlasını öğrenmeye çalışıyorum. Aklımda böyle bir program yok; sadece bu tek problemden öğrenebildiğim kadar çok şey öğrenmeye çalışıyorum.
Mihir Gadgil

0

Bahsedilen burada-doc yöntemi Gnuplot ve diğer birçok program için oldukça yararlıdır. Bu belgedeki Gnuplot komutlarında kabuk değişkenlerini kullanarak, grafiklerinizi kabuk komut dosyanızın komut satırından gelen girdilerle parametreleştirebilirsiniz. Bir şeyi cagily kurarak, geniş "büyük veri" yığınlarından seri üretebilirsiniz. Yüzlerce yapısal dinamik sonlu analizde tam olarak bu yöntemi kullanarak 20.000 ila 80.000 nokta PER PLOT ile tutarlı görünümlü dağılım grafikleri üretiyordum. Çok güçlü bir yöntem.


1
Cevabınızı tamamlamak için burada belirtilen doc yönteminin nasıl kullanılacağına dair bir örnek ekleyebilir misiniz?
Melebius

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.