Python でコマンドライン引数、標準入力を受け取る

結論から言えばsys.argv を使う。
http://www.yukun.info/blog/2008/07/python-command-line-arguments.html
【python】sys.argv で引数をとる - metabo346の日記
コマンドライン引数入力できるPythonプログラムをつくる - 剥いだ布団とメモランダム.old
Python を使っている。
R でもそうだが、コンパイルしないタイプの、対話型言語ではターミナルCUI (かwindows 的にはGUIとかIPython とか? よく知らないが)を使ってガチャガチャ書いて、実行ごとに演算結果を取得している。
大量の処理したいファイルがあって、いわゆるシェル的に

execute hogehoge < huga.txt

みたいにプログラムに投げたいという状況がある。このとき、python で実行できる形式に.py ファイルを書いてバッチ処理できるようにすればよい。
ここで、バッチ処理するには

python script.py

とすれば実行できるが、問題はscript.py がなんらかのファイルを受け取る必要がある場合に、上の1行にファイルパスを記述すればどうにかなるようにしたい。
 
その昔、コンピュータに全く詳しくなかったとき(今でも全然詳しくない)、コンソールにポチポチ打つことを標準入力ということを知った。
Python2で競技プログラミングする時に知っておきたいtips(入出力編) - Qiita
新約:標準入力の受け取りその1(Python3対応版) - Qiita
こうすると、input_raw (python3 ならinput)のところで、コンソールが入力受付状態になり、必要な文字を入れるとそれをpython に流すことができる。
というわけでこれを使って書いていたが、こうすると、シェルスクリプトで書いたときに、ここの部分で入力受付状態のままになって永遠に進まないようである(たぶんエンターを入力するみたいなことを実行すればいいかもしれないが面倒)。
また、この方法だと、入力受付状態のときに、tab でのパス自動補完が利かないようである。
 
というわけで、

python script.py hoge0 hoge1 hoge2 ...

というように引数をとるにはどうしたらよいか、という話で、sys.argv を使うとよいらしい。これはtab 補完も有効である。
 
上のように入力した場合、sys.argv[0] はscript.py になってしまうようなので[1:] から取ることと、ファイルパスを ~/hoge で入力したとき、os.path.expanduser をしないと /home/user/ を補完してくれないので適当につけておく。
 

import sys
import os
input_args = sys.argv[1:]
path = os.path.expanduser(...)