投稿

ラベル(コマンド)が付いた投稿を表示しています

今日のラズパイ日記 : カメラ撮影の露光時間の謎

raspistillコマンドの露光時間(シャッタースピード)設定 カメラモジュールで撮影に使用するコマンドraspistillですが、このコマンドは-ss もしくは --shutterで露光時間設定をマイクロ秒単位で設定出来ます。ただ、このコマンドで長時間露光(数秒単位)しようとすると、コマンドが終了するまで何故かその10倍くらいの時間を要する模様。 例えば「-ss 1000000」と設定すればマイクロ秒単位なのだから露光時間が1秒となるのだけど、コマンドが終了するまで10秒ほど時間を要しました。「-ss 10000000」と露光時間10秒とすると1分40秒(100秒)を要するといった感じ。 なお、撮影したJpegファイルのExifを見ると、露光時間はちゃんとコマンドで設定した値となっていました。 コマンドが露光時間以外に一体何に時間を費やしているのか謎ですが、他のオプションとも関連してるかも知れないのでもう少し調べてみることにします。 なぜこれに気が付いたかというと、タイムラプスモードで撮影しようとしたとき、露光時間を大きく取るとraspistillコマンドがまったく反応しなくなってしまったことからでした。この状態になるとkillコマンドでも終了できなくてRaspberry Pi自体再起動する必要が出てくるという有り様。おそらくタイムラプスの撮影間隔より1回の撮影に要する時間が長くなってしまったのが原因なような気がしますが、はてさて。 確かドキュメントの方には露光時間は6秒以内にするという記述があったような覚えがあるんですが、それも関連してるかも知れないです。 スポンサーリンク Amazon商品リンク : Raspberry Pi関連商品

マウスの右クリックの反応が怪しいけど、反応を調べる方法は何だったっけ?

マウスの右クリックの反応が… どうもマウスの右クリックの反応が怪しいです。ボタンを押すときの指の位置の微妙な違いによって反応したりしなかったり。まぁこのマウスは数年前からたまに右クリックの反応が怪しくなるときがあるので、反応が鈍いこと自体はしょうがないと割り切ってます。 原因としてはおそらくマウス外装、ボタン部分のプラスチックが微妙に変形していて、内部のスイッチを上手く押せていないためじゃないかと思っています。まぁ想像ですが。 ということで、ボタン部分をぎゅっと押さえておくなどしてプラスチックの変形を緩和してやれば対処出来るのではと思った次第。 xなんちゃらコマンド… で、今回の話の本題ですが、ちゃんとボタンが反応するかどうかの判定をする方法をど忘れしちゃってました…。 (まぁ適当なGUIソフトで右クリックメニューが表示されるかどうかでも確認は出来るんですが) 確か「xなんちゃら」というコマンドを実行して、表示されるウィンドウ内でボタンを押せばターミナルに反応が表示されたはず。さて、そのコマンドはなんだっけ?というところまでアタマに出かけてるのですが、そこから先がどうにも思い出せない。ネットで検索しようにも、ちょっとどう検索ワードを指定すればいいのかでまた迷うといった感じ。 はてさて、どうしたものかと悩んでいたのですが、そういえば以前Ubuntuのフォーラムでその手の質問に解答していたことを思い出しました。 https://forums.ubuntulinux.jp/viewtopic.php?id=18431 そうそう、「xevコマンド」を使うんでした。これで右クリックの反応が直ったかどうかの判定が楽に出来そうです。 それにしても、やっぱり記憶にだけ頼るんじゃなくて、ちゃんと書き記して記録として残しておくことも大切ですね。

seqコマンド : コマンドラインで様々な連番テキストを出力

連番というと 日常生活で「連番」というと宝くじを買う時の指定方法が身近ですね。宝くじと言えばついこの間に年末ジャンボの当選発表がありましたね。当たりましたでしょうか? (私はそもそも年末ジャンボは買っていないのですが😜) 連番とは さてそんな話はさておいて、「連番」とは何かしらの番号が連続しているものです。単純に1ずつ増加していくのが連番としては一般的ですね。さらに何かしらの規則に従って数が並んでいるのが数列。なので連番というのは数列の一種と見なせるでしょう。 簡単な連番の作り方 以下は-10から1ずつ増やして10まで並べた連番。 -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 これくらいの連番ならキーボードのテンキーを打てばすぐ作れます。 では以下のような1〜300までの連番はどうでしょう?これをキーボードで打って作るとなるとさぞ大変でしょう。作業自体は単純ですが、指先の神経と集中力を持続させることが要求されます。 001,002,003,004,005,006,007,008,009,010,011,012,013,014,015,016,017,018,019,020,021,022,023,024,025,026,027,028,029,030,031,032,033,034,035,036,037,038,039,040,041,042,043,044,045,046,047,048,049,050,051,052,053,054,055,056,057,058,059,060,061,062,063,064,065,066,067,068,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,084,085,086,087,088,089,090,091,092,093,094,095,096,097,098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,...

catコマンドの出力を行番号付きにするためのコマンドラインオプション(-n, -b)

イメージ
catコマンドの出力を行番号付きにする catコマンドでテキストファイルの中身を出力するとき、行の先頭に行番号を表示させたい場合はコマンドラインオプションに "-n" を付けます。 また "-b" オプションを用いると、改行のみの空白の行はカウントされずに行番号が付与されます。 行番号出力の実行コマンドの例 例として用いるテキストファイル(Pythonのスクリプトファイル)をcatコマンドでオプション無しで出力した場合は以下の通り。 catコマンドでオプション無しで出力 これを "-n" 及び "-b" オプションで出力する例を以下に示します。 実行例1. "-n" オプションで全ての行に行番号を付与 $ cat -n sample01.txt "-n"オプションで行番号を付与 実行例2. "-b" オプションで改行のみの空白行は無視して行番号を付与 $ cat -b sample01.txt "-b"オプションで空白行は無視して行番号を付与 関連記事 lessコマンドで行番号を表示するためのコマンドラインオプション(-N)

lessコマンドで行番号を表示するためのコマンドラインオプション(-N)

イメージ
lessコマンドで行番号を表示 lessコマンドでファイルを表示させる時、行の先頭に行番号を表示させたい場合はコマンドラインオプションに "-N" を付けます。 行番号表示の実行コマンドの例 ファイル名を指定して実行する場合 $ less -N test01.csv パイプを介して実行する場合 $ cat test01.csv | less -N なお、次の実行例のように "-N" オプションはファイル名の後ろにつけてしまうと行番号は表示されません。  (オプションとしてではなく、ファイル名として認識されてしまう模様) $ less test01.csv -N 行番号を表示したときとしなかったときのスクリーンショット 例えばデータファイルで行番号を表示させると次のような表示となります。  行番号を表示させたときのスクリーンショット 比較として、行番号無しの通常の表示では以下の通り。 行番号無しの表示(通常はこの表示)

Bashでインラインコマンド部分$()を書いている時にタブ補完しようとするとエラーとなってしまう

 タイトルの件、 「Bashでインラインコマンド部分$()を書いている時にタブ補完しようとするとエラーとなってしまう」ですが、まず調べてみた結論から書いておきます。 (ここで「インラインコマンド」って書いちゃってますが、機能としては 「Command substitution」 というものです) 結論  関連するパッケージbash-completionの新しいバージョン (1:2.8-3)でこのバグは修正されているようです。 パッケージがバージョンアップされるのを待つのが無難でしょう。 経緯  Bashで$()を用いてインラインコマンドを書こうとしたとき、タブ補完しようとTabキーを押したらエラーが出てしまいました。どうも$()単独で書いているときはエラーとはならず、 emacs $(echo のように先頭にコマンドを書いてある状態で$()を書いてるときにタブ補完しようとすると起きる模様。 表示されるエラーは以下のようになってました。 $ echo $(bash: unexpected EOF while looking for matching `)' bash: syntax error: unexpected end of file $ emacs $(echo ../bash: eval: line 22: unexpected EOF while looking for matching `)' bash: eval: line 23: syntax error: unexpected end of file bash: eval: line 22: unexpected EOF while looking for matching `)' bash: eval: line 23: syntax error: unexpected end of file 原因を調べるためネットで検索してみる 「bash completion inline command」で検索すると、いくつか関連する情報が見つかりました。 Bash Tab Completion: '-bash: unexpected EOF while looking for matching `)' -bash: synt...

Bash(シェル)のキーボードマクロ機能

Bashのキーボードマクロ機能  Bashのドキュメントを読んでいるとき、キーボードマクロという機能があることに目が止まりました。マクロというとおそらくはコマンド操作の自動化が出来そうなので、これは便利そう。ということで、このキーボードマクロについて簡単な説明と実際に使ってみた感想を書いていきます。 GNU Bash manual Keyboard Macros (Bash Reference Manual) キーボードマクロとは  キーボードマクロと言ってもBashのこの機能はテキストを打ったり編集したときのキーストロークを再現するものではなく、実行したコマンドを再現する機能となってます。 キーボードマクロの操作  キーボードマクロに関する機能のうち、主に使うものは以下の3つ。 C-x e : 記録したキーボードマクロの実行 C-x ( : キーボードマクロ記録の開始 C-x ) : キーボードマクロ記録の終了 以下、キーボードマクロはマクロもしくはマクロ機能と省略して書いていきます。 使い方  マクロを使うには、まずどこからのコマンドを記録するかを指定してやる必要があります。この場合「C-x (」というキーバインドによりマクロ記録が開始されます。なお、このとき画面上には記録中などとは表示されないです。その状態で記録したいコマンドをいくつか実行していきます。記録させたいコマンドが終わったら「C-x )」でマクロ記録を終了します。  そして「C-x e」で記録したマクロのコマンドが実行されます。 マクロを使う利点  いくつかのコマンドを自動で実行するときにマクロ機能は便利に使えると思います。コマンドを打つ毎にヒストリーを遡ってコマンドを探してくるという手間も減らせるでしょう。 注意点  マクロ機能を使う上での注意点としては 記録の開始、終了が分かり難い 記録されているマクロの内容が確認出来ない 他の端末で使っているBashにはマクロは引き継がれない Bashを終了すると記録したマクロは消える 「C-x e」と間違えて「C-x C-e」を押すとエディタが立ち上がってしまう  ただドキュメントを読むと記録したマ...

gnuplotでテキストファイルに書かれた設定コマンドを読み込む方法(load)

gnuplotのインタラクティブモードにおいて、 「loadコマンド」   を使うことでテキストファイルに書かれた設定コマンドを読み込むことが出来ます。 話自体はこれといって難しいものではなく、コマンドラインから直接gnuplotのスクリプトファイルを実行するのを、インタラクティブモードでも行うのと同じようなものです。 使い道としては、例えば日付データが入ったデータをプロットする時の設定をテキストファイルに書いておいて、それをプロット前に読み込んで使うというやり方があります。 以前書いた以下のブログ記事で日時データのプロットについて説明しましたが、 gnuplotでの日時データのプロットについて 以下の部分をテキストファイルに保存しておいて、この設定でプロットしたいときにloadコマンドでそのテキストファイルを読み出すという使い方が出来るでしょう。 set xdata time set timefmt "%m/%d %H:%M" set format x "%H:%M" 設定をgnuplot-settings-date01.txtというファイルに保存してあるものとすると、読み出す時のコマンドは以下のようになります。 gnuplot> load "gnuplot-settings-date01.txt" こうすることで設定をloadコマンドによる読み込み1行のみで済ませることが出来ます。お手軽ですね。 この例では設定コマンドのみを書いていますが、プロットコマンドも一緒に書いておくという使い方も出来ます。その場合はほぼコマンドラインからのスクリプトファイルの実行と同じことになりますね。 プロットの度に毎回何行も設定コマンドを入力するのは手間がかかりますが、よく使う設定をテキストファイルに書いて一か所のフォルダにまとめておけば使い勝手も良くなり手間を減らしていくことが出来るでしょう。 その他、gnuplot関連のブログ記事 Amazon データ解析関連書籍など

gnuplotでの日時データのプロットについて

イメージ
日時データのグラフ 日時データのグラフとは gnuplotで描こうとしているグラフのデータファイルで、横軸(x軸)が単なる数字ではなく日時データの場合というのはよくあります。例えば、1時間毎に室温を測定してそれを24時間分まとめてグラフにしたいとか、毎日の体重を1年分グラフにしたいなど。 表計算ソフトとの違い 当然ながらgnuplotでもそのようなグラフを描くことが出来ます。ただし、日時データの取り扱いについては軸の設定や入力データのフォーマットなどを個別に設定する必要があります。表計算ソフトだとデータファイルを読み込むと自動で日時データとして解釈してくれるのであまり意識せずにグラフを描けますが、gnuplotではそうはなっていません。 そのため日時データはそれほど扱わない場合、gnuplotでいざグラフを描こうとすると日時の取り扱いについて調べるのが手間になったりします。それでも一度基本を押さえておくと後で楽になるので、ざっと説明していきます。 基本の設定 日付部分が以下のようなデータファイル(test01.dat)を仮定します。 1列目が「月/日」、2列目が「時:分」、3列目がその時刻の時のデータ値です。 11/12 15:21 10 11/12 16:11 13 11/12 16:46 7 11/12 17:01 14 そしてこれを1行目、2行目を日時として認識してプロットするには gnuplot> set xdata time gnuplot> set timefmt "%m/%d %H:%M" gnuplot> set format x "%H:%M" gnuplot> plot "test01.dat" using 1:3 with linespoints とします。これで出来るグラフは以下の通り。 さて基本的には日付データのを描くときはこのような設定になるのですが、これだけだと分かり難いのでもう少し詳しく1行ずつ解説していきましょう。 set xdata time 1行目の「set xdata time」はx軸で日時データを扱うという指定です。ここでは単にx軸では日時データを扱うという指定だけです。x軸ではなく、入力...

MPV(動画再生ソフト)のハードウェアデコードと設定ファイルについて

始めに 今回はMPV(動画再生ソフト)の設定ファイルについての話になりますが、ハードウェアデコード絡みで起きたことも合わせて書いていきます。 MPVのハードウェアデコードについて(Ubuntu 18.04LTSの場合) 以前に以下のブログでも書いたMPVですが、 MPV(動画再生ソフト)のキーボード操作方法 どうもUbuntu 18.04 LTSのMPVではハードウェアデコードが始めから有効になっているようです。MPVのmanを読むとハードウェアデコードの設定(--hwdec)はデフォルトでは「no」とされているのですが、Ubuntuのリポジトリにあるmpvのソースを読むとハードウェアデコードを使うよう設定されていました。 (なおこれはaptでインストールするMPVの話で、snapパッケージにあるMPVについては調べてはいません) ハードウェアデコードでなぜ困るのか なおこの設定でもちゃんと再生出来ているのなら特に困らないのですが、自分の環境では以前使っていたスマホの動画ファイルだけ何故か再生できませんでした。他の動画ファイルは普通に再生出来ていたのでこれまで特に困らなかったのですが。 そして、MPVの起動オプションでハードウェアデコードを使わないよう設定したところ、そのスマホの動画ファイルも再生出来ました。このように問題のない方法が分かったのですが、毎回MPVの起動オプションを付けて実行するのはめんどうです。MPVは設定ファイルを使うことで起動する際の挙動をカスタマイズ出来るので、それを使って対処することにします。 MPVの設定ファイルの使い方 さて、Ubuntuではデフォルトのハードウェアデコードの設定が変わっているといっても、MPVのシステム側の設定ファイルでそう指定されているだけです。設定ファイル(mpv.conf)はMPVをインストールしたときにシステム内の以下の場所に置かれます(Ubuntuの場合)。 /etc/mpv/mpv.conf MPVを起動するときはここに書かれた設定が使われるというわけです。 そしてその設定を書き換えたい場合、このファイル自体はいじりません。設定ファイルを書き換えたい場合は、ホームディレクトリ以下の次の場所に新たにmpv.confという設定ファイルを作成して置いておきます。 ...

gnuplotでテキストを扱う時のシングルクォート、ダブルクォートなどについて

イメージ
gnuplotに限らず、プログラミング言語ではテキストを扱う場合にはテキストをシングルクォートやダブルクォートで囲います。そして多くの場合、シングルクォートとダブルクォートでは機能がやや異なり、それはgnuplotでも同じです。 実際、gnuplotではどのような使われ方をするのか見てみることにします。 gnuplotで使えるクォートについて まずgnuplotで使えるクォートは3つあります。3つはそれぞれ シングルクォート ダブルクォート バッククォート ですが、最後のバッククォートについては機能が特殊なので最後に説明することにします。まずはシングルクォートとダブルクォートの違いについて見ていきます。 シングルクォートとダブルクォートの違い シングルクォートとダブルクォートで何が違うのかというと、制御文字の扱いが変わってきます。以下の2行の文章を例にすると Hello world! Today is a good day. これを1つのテキストで表すには改行を「\n」で表しダブルクォートを用いて "Hello world!\nToday is a good day." となります。 しかしこれをシングルクォートを用いて 'Hello world!\nToday is a good day.' とした場合は「\n」はバックスラッシュとnと文字通りに扱われて以下のようにそのまま出力されます。 さて制御文字の扱いの違いがあるのは分かったのですが、gnuplotではシングルクォートにおいてもすべてが文字として扱われない場合もあります。 次に説明するenhanced textを使う場合がそれです。 enhanced textの場合 enhanced textの解説はまた別の機会にするとして、簡単に説明すると  y = x 2 のようにテキストを上付きや下付きなどの装飾をするものです。出力端末の設定でこれを使うか使わないか指定出来るのですが、通常は使える場合は使う設定になるようです。 そして、シングルクォートを使う場合でもこのenhanced textの指定は有効となります。 (もちろんダブルクォートを使う場合でも) 単純なようでも話がややこしく感...

gnuplotで疑似ファイル(pseudo-file)を使ったプロット方法 その1

イメージ
gnuplotではデータファイルをプロットすることが出来ますが、数式をプロットする際にデータファイルとしてプロットするにはどうすればいいでしょう? という話ですが、それなら何かしらのプログラミング言語などの数式処理でそういうデータファイルを出力してそれをgnuplotで読み込ませればいいわけですが、今回はそれとはちょっと違った話でgnuplotの機能にある疑似ファイルというものを使う方法について解説します。 疑似ファイル(pseudo-file)を使う方法 gnuplotのドキュメントではpseudo-fileとなっているので疑似ファイルと表しますが、個人的にはダミーファイルと言った方がニュアンスとしては分かりやすいです。まぁそれでもドキュメントの方に合わせて疑似ファイルと言うことにして話を進めます。 Special-filenamesについて まずgnuplotではデータファイルの特別な扱いとしていくつかのSpecial-filenamesというものが存在します。Special-filenamesには '' '-' '+' '++' があります。その中で'+'と'++'が疑似ファイルとして扱われるもので、今回は'+'を使ったプロット方法について解説していきます。 '++'は3次元プロットなどで使われるようで、また別の機会に解説したいと思います。 ''はplot1行で同じデータファイルを複数プロットする場合に、ファイル名の記述を2つ目以降は省略するために用いられます。 '-'はその場でデータを記述するモードに入るようですが、解説は長くなりそうなのでまた別の機会に 疑似ファイル'+'の簡単な使い方 疑似ファイルは形式的にはデータファイル扱いのため、プロットするときはusingオプションを使った記述となります。 例として、cos(x)を疑似ファイルでプロットする場合は gnuplot> plot '+' using ($1):(cos($1)) という記述になります。($1)はデータファイルの1列目を指定する記述です。...

gnuplotで出力端末がどういったグラフィック出力をするのかテストする方法

イメージ
gnuplotは出力端末によって線のスタイルなど微妙に違っていたりします。そのため現在の出力端末がどのようなグラフィック出力となっているのか確認したい場合も出てきます。 実際に出力してみて、それから自分が思ったようになるよう調整していけばいいのですが、簡単に一括で出力する方法もあります。 方法は簡単でgnuplotのインタラクティブモードで「test」というコマンドを実行するだけです。 このように実行すると gnuplot> test 以下のような画面が表示されます(qt端末の場合)。 このように出力を見れば、線幅や点線の出力、塗りつぶし、フォントの扱いなどが分かるようになっています。 またカラーパレットのチェックには以下のコマンドを使います。 gnuplot> test palette 出力は以下のようになります。 さて、以上は画面出力が出来るqt端末で実行しましたが、ファイル出力の場合は当然ながら出力ファイルを指定してから実行する必要があります。pngを出力端末とした場合は gnuplot> set term png gnuplot> set output "test.png" gnuplot> test とすれば、test.pngファイルにtestコマンドの実行結果が出力されます。 その他、gnuplot関連のブログ記事 Amazon データ解析関連書籍など

gnuplotのplotでforループを使ったグラフプロット(plot for [i = ... )

イメージ
以前に書いたブログ gnuplotでアニメーショングラフの作成 : ループ処理の基礎 で「do for ...」を使ったループ処理について解説しました。そしてgnuplotにはこれとは異なるforループというものも使うことが出来ます。 (便宜上ループと言ってますが、ドキュメントの方ではイテレーションとなってます。意味としてはイテレーションの方が適切でしょう。ただうまく説明出来るだけの知識が無いのでループと言うことにします😔) forの書き方 このforの使い方は、書き方は基本的に以下のようになります。 plot for [i = 1:5] sin(x) * i そして結果は以下のグラフとなります。 これをforを使わないで表せば以下のようになります。 plot sin(x), sin(x)*2, sin(x)*3, sin(x)*4, sin(x)*5 forを使う場合と使わない場合を見比べれば、かなり書き方を簡略化出来ることが分かります。 書き方としてはplotのすぐ後ろにforの構文が入るので、なんでこれでループとなるのか?と面食らうかも知れませんが、まぁそういうものだと思って慣れるのがいいかと。 また、以下のように続けて使うことも出来ます。 plot for [i = 1:15] sin(x)*i, for [i=1:30] cos(x)*i なおiは1ずつしか増やせないかというとそうでもなく、 [i = 1:100:4] のように書けばiを4ずつ増やすことが出来ます。 (変数名はiである必要はないです) また変数の値を増やすだけでなく、いくつかのファイル名などをまとめて渡すというような使い方も出来ます。書式は [file in "001.dat 002.dat 003.dat"] のような書き方となります。こちらはデータプロットの際に役に立つでしょう。 forはここまでで説明したplot以外にもsetやunsetで使うことも出来るようです。 以上のようにforは1つのキャンバスに複数のグラフをまとめてプロットする場合に便利かと思います。 その他gnuplot関連のブログ記事 Amazon データ解析関連書籍など

gnuplotのヘルプ機能の使い方

gnuplotにはいろんな機能があるのですが、コマンドライン操作が主体であるためどんな機能や設定があるのかを把握するにはドキュメントなどを頻繁に調べる必要があります。 (GUIがあるソフトのようなマウスでメニューから機能を選んで探すみたいなことが出来ないため) 調べるにはドキュメントを見て探すのもいいのですが、gnuplotのヘルプ機能を使えば項目を探す手間を減らすことが出来ます。 ヘルプ機能の使い方 ヘルプ機能は、インタラクティブモードに入っているときに help と入力して実行すると表示されます。この場合、gnuplotの使い方の概略などが出てきます。ここから各項目のヘルプを見るにはもう少し操作が必要です。 各項目を調べるには help 項目名 とすればいいのですが、まずどんな項目名があるのか把握しておく必要があります。 その場合は help ? と実行すると項目名(トピック)の一覧が表示されます。その一覧からどの項目を見たいのか決めたら help plot のように項目名を付けて実行します。 サブトピックの調べ方 また項目によってはさらに下位の項目(サブトピック)が存在します。例えばplotコマンドのfor機能を調べる場合は以下のようにします。 help plot for サブトピックにどんなものがあるのかはトピックの説明に書かれているのでそこから選びましょう。 さて、サブトピックを見る方法としてはこの他に、トピックを読んでいる状態からサブトピックに入って読む方法もあります。 まずトピックを読んでいると画面の一番下に 「Press return for more: 」 と表示されています。リターンキーを押すと次のページに移ります。 そしてサブトピックがある項目では最後のページになると画面の一番下の表記が 「Subtopic of plot: 」 のように変化します。この状態で調べたいサブトピックの項目名を入力することでそのヘルプを見ることが出来ます。 最後に Webで検索しても役立つ情報はたくさん出てくるのですが、大元の情報はやはり公式のドキュメントやヘルプになります。どういった調べ方がベストなのかはその人次第なので一概にこうすればいいというものでもないですが、やはり公式の情...

gnuplotで標準入力からコマンドを受け取りプロットする

イメージ
以前のブログ記事 gnuplotでコマンドラインから日本語入力したい場合の対処方法 で「-e」オプションを用いることで、gnuplotのコマンドラインに入らずにグラフをプロットする方法を解説しました。 (gnuplotのコマンドラインのことはインタラクティブモードと言うようです。またコマンドラインに入らずに実行することはバッチモードと言うようです。以降、用語としてインタラクティブモード、バッチモードを使っていくことにします) 標準入力から受け取る方法 gnuplotのバッチモードでは「-e」オプションの他に、標準入力からコマンド文を受け取ってプロットする方法があります。これはgnuplot以外のコマンドでもよく用いられている方法で、コマンドラインオプションに「-」を用います。 例 簡単な実行例は以下のようになります。 echo "plot x" | gnuplot -p - echoで「plot x」という文を生成、それをパイプを用いて標準入力としてgnuplot側に渡しています。 (gnuplotの-pオプションは以前のブログで説明しましたが「-persist」オプションのことです) 複数行の命令文を渡す場合は以下のようになります。 echo "set sample 500; set yrange [-1.5:1.5]; plot sin(x*3)" | gnuplot -p - 今回はechoで命令文を生成して渡しましたが、当然他のコマンドからでも渡すことが出来ます。「-e」オプションを用いる場合との違いはそれで、標準入力から受け取れることを利用すればシェルスクリプトと組み合わせるなど汎用的な使い方が出来るかと思います。 その他、gnuplot関連のブログ記事 Amazon データ解析関連書籍など

bashでのコマンドライン引数の扱いについて : その1 ワイルドカード(*)の場合

イメージ
前回、bashでのコマンドライン引数を調べるサンプルプログラムを作ってみたので、さっそくこれを使って実際の扱いを調べてみることにしました。 前回のブログ記事↓ コマンドライン引数の扱いがよく分からなかったので調べるためにサンプルプログラムを作成 ワイルドカード(*)について まずコマンドラインでよく使うワイルドカード(*)がどう引数として渡されるのかを調べてみます。 状況 : ディレクトリ内にあるファイルは以下の6つ。 ここでサンプルプログラム(argvtest01.py)を実行 $ python3 argvtest01.py * すると以下のように出力されます。 argv1 = argvtest01.py argv2 = file01.txt argv3 = file02.txt argv4 = file03.txt argv5 = file04.txt argv6 = file05.txt ディレクトリ内にあるファイルのファイル名がそれぞれ別の引数に渡されています。 次にエスケープ文字を前に置いた場合 $ python3 argvtest01.py \* argv1 = * 引数に*(アスタリスク)が文字として渡されています。 シングルクォートで囲んだ場合 $ python3 argvtest01.py '*' argv1 = * これも引数に*が渡されています。 ダブルクォートではどうなるか $ python3 argvtest01.py "*" argv1 = * これも*が渡されています。 ドットを前に置いた場合 $ python3 argvtest01.py .* argv1 = . argv2 = .. となりました。隠しファイルを作っておいた場合はそのファイル名も渡されます。 今回は特に変わったことはしていないので、ほぼ想定通りの結果でした。 ワイルドカードを使う場合、シェルで展開させたい場合とコマンドにワイルドカードを渡してコマンド側で展開などに使いたい場合があるかと思います。そういった場合にどう書けばよいかはこれでだいたい分かるかなと。 また、ダブルクォートで囲んだ場合に展開されるのかどうかがたまに思い出せないこ...

コマンドライン引数の扱いがよく分からなかったので調べるためにサンプルプログラムを作成

コマンドラインからコマンドに引数を渡す際の挙動で、分かり難い状況🤔があったのでそれを調べるためにPythonでサンプルプログラムを作成してみました。 コマンドライン引数の扱いは、通常なら単にスペースで区切られているだけなので特に調べる必要はないんですけどね。ただ、ワイルドカードなどシェル補完がある場合の扱いがどうなるのかはちゃんと調べておきたいところ。それとシングルクォート、ダブルクォートを複数組み合わせて使うような場合とか。 作ったサンプルプログラムは以下に示した通り。 import sys l = len(sys.argv) for i in range(l) : if i == 0: continue print("argv{0} = {1}".format(i, sys.argv[i])) 以上をtest01.pyとして保存して次のようにコマンドライン引数をいくつか渡して実行  $ python3 test01.py test1 test2 test3 すると以下のように1つずつコマンドライン引数が分離されて出力されます。 argv1 = test1 argv2 = test2 argv3 = test3 argv[0]にはスクリプトファイル名が入ってるだけで引数を調べる上では必要ないため、サンプルプログラムではそれは出力されないようにしています とりあえずこれを元にいろいろ調べてみようかなと思います😉 Amazon プログラミング関連書籍など

bashでコメントアウトする方法(1行のみの場合)

イメージ
bashでは行頭に「#」を書くと、その行はコメントとして扱われます。 例えばコマンドラインから $ # test sleep command $ sleep 3 とすると、1行目は行頭に「#」があるのでコメントとして扱われ、2行目だけ実行されます。 また行頭ではなく行の途中に「#」を書くと、行のそれ以降がコメントとして扱われます。 例えば $ date # output current date とすると「date」のみ実行され、「# output current date」はコメントとして扱われることになります。 行の途中に「#」を書く場合の注意点として、「#」の前にスペースを入れないとコメントとして扱われません。 例えば $ echo aaa#bbb と実行すると $ aaa#bbb と出力されます。つまりはスペースを入れないとコマンドや文字列の一部として扱われてしまうことになります。 コメントアウトの使いどころ シェルスクリプトでスクリプトファイルを書いているときは、コメントアウトで簡単にどんな処理をしているのか説明を書いておくと後から見た時に内容がわかりやすくなるでしょう。 コマンドラインにおいては、長い処理の途中までの動作を調べたい場合に途中で区切っておく用途などでしょうか。あとは単にメモとしてコメントを書いておく場合など。 Amazon シェルスクリプト関連書籍など

gnuplotでコマンドラインから日本語入力したい場合の対処方法

イメージ
日本語入力しようとすると何故か文字化け 以前のブログ記事の後半で、gnuplotのコマンドラインに日本語入力すると何故か文字化けしてしまうという件に触れました。 gnuplotのフォントの扱いについて簡単に解説  環境はUbuntu18.04LTSのGNOME Terminal(それとGuakeでも試してます)。上の動画で試しているように、GNOME Terminal自体では問題なく日本語を入力することが出来ています。しかし、gnuplotを起動するとそちらのコマンドライン上では日本語入力すると文字化けしてしまいました。gnuplot自体はGNOME Terminal上で動いているわけで、何故に文字の扱いが異なってしまうのかちょっと分からず。まぁこういう解決方法にたどり着くまでに時間がかかりそうな件はとりあえず一時的な対処方法を考えた方がいいでしょう。 対処方法 以前のブログにも書いたようにスクリプトファイルとして読み込めば日本語は扱えるわけですが、ちょっとしたグラフをプロットするのに一々スクリプトファイルを作って書くのはめんどうです。 そして、なるべく手間を減らしてコマンドラインのみで完結させる方法として、gnuplotのコマンドラインに入らずにプロットを実行するという手段があります。これはGNOME Terminalからのgnuplot実行時にプロット命令を全て渡してしまうという方法です。 簡単な書き方は以下のようになります。 gnuplot -persist -e "set title \"あめんぼあかいな\" ; plot sin(x)" gnuplotは「-eオプション」でそのまま引数を命令として渡すことが出来ます(命令文自体は""で閉じておきます)。命令文が複数あるときは「;」で区切ります。「set title」などテキストを渡す時に「""」を使ってしまうと引数で使っているダブルクォートとかち合ってしまうのでうまく回避させましょう(上の例ではバックスラッシュを使うことで回避)。また「-persist」オプション(-pと省略可)は実行後にも出力ウィンドウを残すという指定です。ただこれだとgnuplot自体は終了するので、出力ウィン...

スポンサーリンク