Python の出力が tee で表示されない理由

最近 Python で Slack Bot を作りました。横着をして、log のメッセージを print でそのまま出力し、tee コマンドでファイルに保存していました。こうすると、コンソールで動作の情報を見ながら、同じ情報をファイルにも残せます。ところが Python の print() と tee を組み合わせて使うと、指定した log ファイルの中身がよく空っぽになったり、本来すぐ出るはずのメッセージがずっと後になって出てきたりしたのです。調べてみると、Python の print 関数は出力先を判断していることがわかりました。出力先が Shell であればすぐに出力されますが、そうでなければ一度 Buffer に溜めておき、バッファがいっぱいになってからまとめて出力されます。つまり Python を tee と組み合わせて使うと、このバッファの問題にぶつかり、期待した出力がすぐには画面にもファイルにも現れないのです。 ...

2018年6月16日 · 1 分

bash: warning: setlocale: LC_ALL: cannot change locale の対処法

SSH でリモートサーバーにログインしたとき、「-bash: warning: setlocale: LC_ALL: cannot change locale」というエラーが表示されていませんか? これは、SSH でリモートホストに接続すると、ローカルの LC_* 変数(ロケール)が自動的にリモートホストへ送信されるために起こります。サーバーが指定したロケールに対応していない場合、「-bash: warning: setlocale: LC_ALL: cannot change locale」というエラーになります! ...

2017年2月22日 · 1 分

GitLab が本番データベースを誤って削除したとき、rm コマンドはどう管理すべきか?

ルートディレクトリをうっかり削除してしまうという悲劇は、子どもの頃には冗談として聞いていたことでしょう。でも、ただの冗談だと思わないでください! 私自身も、友人のパソコンがこうした惨事に遭うのを数え切れないほど見てきました。そして今日は、GitLab(GitHub に似たサービス)のエンジニアが、rm -rf コマンドの恐ろしい威力を身をもって示してくれました……。本番サーバーのデータベースを消去してしまったのです……。こんな惨事は自分には起こらないと思っていました。しかし、利用者が何万人もいる GitLab のようなサービスでさえ、不注意からこうした事態が起きてしまいました。そこで、防ぐ方法を調べてみました。今回は、rm コマンドをどう管理すべきかを紹介します! ...

2017年2月1日 · 1 分

Linux/macOS で大容量ファイルを生成する

ネットワーク速度、ディスクの読み書き性能、プログラムの動作性能などをテストするために、指定したサイズのファイルが必要になることがあります。そのとき、まず思い浮かぶのは dd でしょう? しかし、dd でファイルを作ると遅いと感じませんか? さらに、dd のほかに truncate や fallocate も使えることをご存じでしょうか? この記事では、大きなファイルを生成する方法、その使い方、そしてそれぞれの違いを簡単に説明します。なお、ここで生成するファイルの内容には意味がないことにご注意ください。 ...

2017年1月27日 · 1 分

Terminal でコマンドの実行時間を計測するには?

Terminal で実行するコマンドの実行時間を計測しようと考えたことはありますか? 最近、仕事の必要から、さまざまなコマンドを組み合わせてファイル分類ツールを作りました。しかし、性能に厳しい要件があり、指定された時間内に終わらせる必要がありました。そこで、コマンドの実行時間を計測できる便利な time コマンドを調べました。 ...

2017年1月27日 · 1 分

Linux Grep のコツ - 指定した文字列を含む行を検索する

Linux では、ファイルの中からキーワードを含む「行」を素早く検索したいことがよくあります。たとえばログを見ているときに、ある時刻に発生したエラーを探したい場合があります。ファイルを開いて一行ずつ探すのはあまり効率的ではありません。そんなときに grep の出番です! ...

2017年1月20日 · 1 分

Crontab が正しく動いているか確認する方法は?

皆さんも同じような悩みを抱えたことはありませんか? crontab を覚えたての頃は、設定が正しいのか自信が持てず、設定した後に予定どおり実行されるのか不安になるものです。この記事では、crontab が正しく設定されているかを確認する二つの方法を紹介します! ...

2017年1月20日 · 1 分

SSH ログインをフックして通知(メールなど)を送る方法

Google や Facebook にログインすると、セキュリティ向上のために通知メールが届きます。IT の人なら、「SSH でも同じことができないか」と考えたことがあるのではないでしょうか。どのユーザーが SSH でログインしても、システム管理者へ通知が送られれば、セキュリティに役立ちます。 ...

2016年7月30日 · 1 分

PHP 拡張機能を手動でコンパイル・インストールする(Linux)

PHP に拡張機能をインストールするにはどうすればよいでしょうか。多くの人は Pecl を使うと答えるでしょう。確かに Pecl は拡張機能を簡単にインストールできる、とても便利な方法です。しかし、サーバーに Pecl がない場合はどうすればよいでしょうか。また、何らかの理由で Pecl をインストールできない場合はどうでしょう。そのときは、手動でコンパイルしてインストールするしかありません~ この記事では、Linux で PHP 拡張機能を手動でコンパイルする方法を紹介します。 ...

2012年1月26日 · 1 分

Linux に Python を手動でインストールし、yum が動かなくなる問題を避ける方法

以前、Linux 上の重要なデータを自動でバックアップして Google Storage にアップロードするプログラムを書いたことがあります。当時は Python 2.7 を使っていましたが、Linux に標準で入っている Python は 2.4 で、yum でアップグレードしても最新は 2.4 までです。そのため新しいバージョンの Python を使うには、自分でコンパイルするしかありません。以下では Python 3.2 を例に説明します。 ...

2011年8月19日 · 1 分