दिलचस्प पोस्ट
पायथन में "आंतरिक अपवाद" (ट्रैसबैक के साथ)? अपवाद को क्यों नहीं चेक किया गया है .नेट? एएसपी.नेट 4.5 एमवीसी 4 विंडोज सर्वर 2008 आईआईएस 7 पर काम नहीं कर रहा है कैसे जावा सॉकेट का उपयोग कर क्लाइंट और सर्वर के बीच अंतरण फाइल प्राप्त करने के लिए मैं JSON को CSV में कैसे रूपांतरित कर सकता / सकती हूं? टेक्सटेरा जो उड़ने पर सिंटैक्स हाइलाइट कर सकता है? सरल इंजेक्टर के साथ IAuthenticationManager पंजीकृत करें प्रतिलिपि बिना संरेखित सरंचनाओं को संरेखित करें Android में ProgressBar अपडेट को चेतन करें एआरसी के साथ, बेहतर क्या है: आलोक या आटोरायलेज़ इनिशियलाइजर्स? स्विंगवार्कर, थ्रेड.sleep (), या javax.swing.timer? मुझे "एक विराम डालें" की आवश्यकता है IPhone पर JSON दिनांक को पार्स करना बीसीपी / बल्क INSERT बनाम टेबल-वैल्यू पैरामीटर का प्रदर्शन कैसे WPF विंडो में बंद करें बटन छिपाने के लिए? MySQL: रिकॉर्ड सम्मिलित करें यदि तालिका में मौजूद नहीं है

कैसे gnplot करने के लिए कमांड लाइन तर्क पारित करने के लिए?

मैं डेटा फ़ाइल से आरेखण करने के लिए gnuplot का उपयोग करना चाहता हूँ, foo.data कहें । वर्तमान में, मैंने कमांड फाइल में डेटा फ़ाइल नाम को कड़ी मेहनत से लिखा है , foo.plt कहते हैं, और कमांड gnuplot foo.plg को प्लॉट डेटा के लिए gnuplot foo.plg । हालांकि, मैं डेटा फ़ाइल नाम को कमांड तर्क के रूप में देना चाहता हूं, जैसे चल रहे कमांड gnuplot foo.plg foo.dataग्नुप्लॉट स्क्रिप्ट फ़ाइल में कमांड लाइन तर्क को कैसे पार्स करना है? धन्यवाद।

Solutions Collecting From Web of "कैसे gnplot करने के लिए कमांड लाइन तर्क पारित करने के लिए?"

आप स्विच -e माध्यम से इनपुट चर कर सकते हैं

 $ gnuplot -e "filename='foo.data'" foo.plg 

Foo.plg में आप उस चर का उपयोग कर सकते हैं

 $ cat foo.plg plot filename pause -1 

"Foo.plg" को थोड़ा और सामान्य बनाने के लिए, सशर्त का प्रयोग करें:

 if (!exists("filename")) filename='default.dat' plot filename pause -1 

आप संस्करण 5 के बाद से एक gnuplot स्क्रिप्ट के लिए तर्कों को पास कर सकते हैं, flag -c साथ ये तर्क ARG0 से ARG9 , ARG0 चर के माध्यम से और ARG0 से ARG9 ARG9 स्ट्रिंग चर के माध्यम से पहुँचा जा सकता है। तर्कों की संख्या ARGC द्वारा दी गई है।

उदाहरण के लिए, निम्न स्क्रिप्ट ("script.gp")

 #!/usr/local/bin/gnuplot --persist THIRD=ARG3 print "script name : ", ARG0 print "first argument : ", ARG1 print "third argument : ", THIRD print "number of arguments: ", ARGC 

के रूप में कहा जा सकता है:

 $ gnuplot -c script.gp one two three four five script name : script.gp first argument : one third argument : three number of arguments: 5 

या gnuplot के भीतर के रूप में

 gnuplot> call 'script.gp' one two three four five script name : script.gp first argument : one third argument : three number of arguments: 5 

ग्नुप्लट 4.6.6 और उससे पहले में, एक अलग अलग (अब बहिष्कृत) वाक्यविन्यास के साथ एक call तंत्र मौजूद है। तर्क $# , $0 , …, $9 माध्यम से पहुंचा जा सकता है। उदाहरण के लिए, ऊपर दी गई लिपि समान दिखती है:

 #!/usr/bin/gnuplot --persist THIRD="$2" print "first argument : ", "$0" print "second argument : ", "$1" print "third argument : ", THIRD print "number of arguments: ", "$#" 

और इसे gnuplot के भीतर कहा जाता है (याद है, संस्करण <4.6.6)

 gnuplot> call 'script4.gp' one two three four five first argument : one second argument : two third argument : three number of arguments: 5 

नोटिस स्क्रिप्ट नाम के लिए कोई वैरिएबल नहीं है, इसलिए $0 पहला तर्क है, और चर को उद्धरण चिह्नों के भीतर कहा जाता है। कमांड लाइन से सीधे इसका उपयोग करने का कोई तरीका नहीं है, केवल चाल के माध्यम से, जिसे @ कॉन्फू-से ने सुझाव दिया है

यहां बताया गया है कि आप पर्यावरण के माध्यम से जानकारी भी पास कर सकते हैं । इस्माइल अमीन का उदाहरण यहाँ दोहराया गया है:

खोल में:

 export name=plot_data_file 

एक Gnuplot स्क्रिप्ट में:

 #! /usr/bin/gnuplot name=system("echo $name") set title name plot name using ($16 * 8):20 with linespoints notitle pause -1 

जारी लामानन का जवाब सबसे अच्छा समाधान है। मैं चाहता हूं कि शेल चर के साथ 1 से अधिक इनपुट पैरामीटर का उपयोग कैसे करें:

 output=test1.png data=foo.data gnuplot -e "datafile='${data}'; outputname='${output}'" foo.plg 

और foo.plg:

 set terminal png set outputname f(x) = sin(x) plot datafile 

जैसा कि आप देख सकते हैं, अर्ध कॉलन (जैसे बाश स्क्रिप्ट में) के साथ अधिक पैरामीटर पारित किए जाते हैं, लेकिन स्ट्रिंग वेरिएबल्स को '' (ग्नुप्लॉट सिंटैक्स, बैश सिंटैक्स नहीं है)

आप यूनिक्स / लिनक्स वातावरण में चाल का उपयोग कर सकते हैं:

  1. ग्नुप्लॉट प्रोग्राम में: प्लॉट "/ dev / stdin" …

  2. कमांड लाइन में: gnuplot program.plot <data.dat

आप कुछ शैल जादू भी कर सकते हैं, उदाहरण के लिए:

 #!/bin/bash inputfile="${1}" #you could even do some getopt magic here... ################################################################################ ## generate a gnuplotscript, strip off bash header gnuplotscript=$(mktemp /tmp/gnuplot_cmd_$(basename "${0}").XXXXXX.gnuplot) firstline=$(grep -m 1 -n "^#!/usr/bin/gnuplot" "${0}") firstline=${firstline%%:*} #remove everything after the colon sed -e "1,${firstline}d" < "${0}" > "${gnuplotscript}" ################################################################################ ## run gnuplot /usr/bin/gnuplot -e "inputfile=\"${inputfile}\"" "${gnuplotscript}" status=$? if [[ ${status} -ne 0 ]] ; then echo "ERROR: gnuplot returned with exit status $?" fi ################################################################################ ## cleanup and exit rm -f "${gnuplotscript}" exit ${status} #!/usr/bin/gnuplot plot inputfile using 1:4 with linespoints #... or whatever you want 

मेरा कार्यान्वयन थोड़ा और अधिक जटिल है (जैसे कि सैड कॉल में कुछ जादू टोकन की जगह है, जबकि मैं पहले से ही हूं …), लेकिन मैं इस उदाहरण को बेहतर समझने के लिए सरल बना दिया। आप इसे भी सरल बना सकते हैं …. YMMV।

यह प्रश्न अच्छी तरह से उत्तर दिया गया है लेकिन मुझे लगता है कि यहां पर यहां भरने के लिए मैं एक जगह पा सकता हूं, अगर किसी के साथ काम करने के काम को कम करने के लिए जैसे मैंने किया था जैसे मैंने किया। योगबर्ट के उत्तर ने मुझे इस समस्या के अपने संस्करण को हल करने के लिए मुझे क्या आवश्यक था और इसलिए मैं यहां अपना समाधान साझा करूंगा।

मैंने एक अप-टू-डेट वातावरण में एक भू-स्क्रिप्ट विकसित की जो मुझे करने की अनुमति दी थी:

 #!/usr/bin/gnuplot -c set terminal png truecolor transparent crop set output ARG1 set size 1, 0.2 rrLower = ARG2 rrUpper = ARG3 rrSD = ARG4 resultx = ARG5+0 # Type coercion required for data series resulty = 0.02 # fixed # etc. 

यह हाल ही में ग्नुप्लॉट के साथ एक वातावरण में कमांड लाइन से अच्छी तरह से कार्यान्वित करता है (मेरे मामले में 5.0.3)।

 $ ./plotStuff.gp 

जब मेरे सर्वर पर अपलोड किया जाता है और निष्पादित किया जाता है, तो यह विफल हो गया क्योंकि सर्वर संस्करण 4.6.4 (वर्तमान में उबंटू 14.04 एलटीएस पर) था। शिम के नीचे मूल स्क्रिप्ट में कोई भी बदलाव किए बिना इस समस्या का समाधान किया।

 #!/bin/bash # GPlot v<4.6.6 doesn't support direct command line arguments. #This script backfills the functionality transparently. SCRIPT="plotStuff.gp" ARG1=$1 ARG2=$2 ARG3=$3 ARG4=$4 ARG5=$5 ARG6=$6 gnuplot -e "ARG1='${ARG1}'; ARG2='${ARG2}'; ARG3='${ARG3}'; ARG4='${ARG4}'; ARG5='${ARG5}'; ARG6='${ARG6}'" $SCRIPT 

इन दो लिपियों के संयोजन को मान से gnuplot संस्करण के बिना और मूल रूप से किसी भी * निकस के बिना पैरामीटर को bash से gnuplot स्क्रिप्ट पारित करने की अनुमति देता है।

फिर भी एक और तरीका यह है:

आपके पास scriptname.gp नामक एक gnuplot स्क्रिप्ट है:

 #!/usr/bin/gnuplot -p # This code is in the file 'scriptname.gp' EPATH = $0 FILENAME = $1 plot FILENAME 

अब आप सिंटैक्स की scriptname.gp शांति से scriptname.gp स्क्रिप्ट scriptname.gp कॉल कर सकते हैं:

 echo "call \"scriptname.gp\" \"'.'\" \"'data.dat'\"" | gnuplot 

खोल लिखने में

 gnuplot -persist -e "plot filename1.dat,filename2.dat" 

और लगातार फ़ाइलें जो आप चाहते हैं -परिसिस्ट का इस्तेमाल ग्नुप्लॉट स्क्रीन पर रहने के लिए किया जाता है, जब तक उपयोगकर्ता मैन्युअल रूप से इसे बाहर नहीं करता है।