Posts on command

ちょっとしたコマンドラインツールをpythonで作る時に便利なargparseのテストで気をつけるべきこと。

ちょっとしたコマンドラインツールをpythonで作る時に便利なargparseなんですが、位置引数ありparserが出す例外をテストするコードを書いて初めて知ったことがありました。 そのメモ書きになります。 位置引数とは argparseの公式ページにも載っている通り、コマンドライン実行時に必須となる引数のことです。以下引用。 位置引数は次のように作成します: >>> >>> parser.add_argument('bar') parse_args() が呼ばれたとき、オプション引数は接頭辞 - により識別され、それ以外の引数は位置引数として扱われます: >>> >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('-f', '--foo') >>> parser.add_argument('bar') >>> parser.…

bashでファイル末尾を0埋めする方法。例えばLinuxカーネルのページサイズでalignしたい場合。

文字列の先頭や末尾を0埋めする方法はよくあるんですが、ファイル末尾を0データで埋める方法って、なかなか見つからなかったので、書いてみました。 こんなの一体いつ使うのか? と聞かれたら、使う機会は早々ないのであまり役に立たないかもしれないです(・_・; が、例えばinitramfsイメージファイルをLinuxカーネルのページサイズでalignしたい場合に役立ちます。 …絶対使わなそうですが、以下のようなスクリプトを書いてtest.shとして保存しておき、test.sh target.bin 4096のように実行すれば、target.binの後に0データを付加して4096バイトでalignしてくれます。 #!/bin/bash FILE_TARGET=${1} SIZE_PAGE=${2} function get_file_size() { FILE=${1} echo $(LANG=C ls -l ${FILE} | cut -d' ' -f5) } function get_printf_format() { SIZE_PAD=${1} while [ ${SIZE_PAD} -gt 0…

chmod 777 禁止!

何も考えずにchmod 777 ${some_file}するの、やめて本当にマジで。 そのファイルの所有者やグループ設定、何の意味もなくなっちゃうでしょ! 誰でも読み書き削除できちゃうじゃんか! というニュアンスが、拙い英語だとほぼ通じない。特に相手は強者インド人。 自分:「このsleep 10は何のためにあるの?」 インド人:「ああ、2秒くらい待てば良い?(言いながらsleep 2にチョチョイと修正)」 自分:「修正する前に質問に答えなさい!」 万事がこんな感じ。Don't set three seven! Any process accidentally write or remove the file!なんて言ってみたところでBut that's more convenient.と返されるだけ…。 本当に必要な権限なんだったら、せめてchmod a=rwx ${file}にして。実行権を追加したいのなら、chmod a+x ${file}して。man chmodすれば詳しい使い方出てくるんだから。 NAME…

ちょっとしたコマンドラインツールをpythonで作る時に便利なargparseの使い方

2016.11.3 追記しました。argparseのテストで気をつけるべきこと。 ちょっとしたコマンドラインツールを作るとき、欲しくなるのが以下のようなカッコイイオプション指定機能とヘルプ表示。 pythonなら、標準で使えるargparseパッケージを使って簡単に実装することができます。 こうして作ったツールをstart−stop−daemonと組み合わせて、オフグリッドシステム監視に使ってたりします。 以下の例は別のツールなので、オフグリッドシステム監視ツールについてはまた別の機会に。 $ ./photosort.py -h usage: photosort.py [-h] [-d [PATH_ROOT_DST]] [-p SORT_PHOTO_EXTENTIONS [SORT_PHOTO_EXTENTIONS ...]] [-v SORT_VIDEO_EXTENTIONS [SORT_VIDEO_EXTENTIONS ...]] [-l DELIMITER] [--subdir-year] [--subdir-month] [--copy] [--debug DEBUG] path_root_src This script to make directory…