ぷちます!!が終わってしまった...夏のはじまりをあのカレンダーで迎えたい
ぷちます!!‐プチプチ・アイドルマスター‐ 第74話「食って寝て遊べ」 - ニコニコ動画:GINZA
終わってしまいました...ぷちます!!。
ぷちます!!‐プチプチ・アイドルマスター‐ [最新話無料] - ニコニコチャンネル:アニメ
でも、夏のはじまりをあのカレンダーで迎えたい!だったら、Pythonでつくろう!!
MacにThe Generic Mapping Toolsをインストールして地図を描く
この前の記事 で用いた gmt のMacへのインストール方法を紹介します。そして、ちょっとした地図を描いてみます。
subprocessモジュールでリダイレクト(>, >>)を実現する
昨日の記事 では、単純に標準出力をファイルへ書き出した。しかし、ターミナルで同じことをしたい場合はリダイレクト( > , >> )を使うのが普通だと思う。
$ gmt --version > sample.txt
$ gmt --version >> sample.txt
ならばということで、Pythonでリダイレクトを処理できるようにする。前回と同様にして
- ターミナル上で入力するコマンドをそのままPythonで処理
コマンドをshlexで単純なリストに成形してsubprocessへ渡す
>>> import shlex
>>> shlex.split('ls -a >> a.txt')
['ls', '-a', '>>', 'a.txt']
>>> shlex.split('gmt --version > sample.txt')
['gmt', '--version', '>', 'sample.txt']
このように取り出せた > , >> を検出してやればいい。ただし、スペースが無いとダメ。
>>> shlex.split('gmt --version >sample.txt')
['gmt', '--version', '>sample.txt']
なので、きちんとエラーを検出してやる。
if '>' in script_list:
# Writing mode
elif '>>' in script_list:
# Appending mode
elif ('>' in script) or ('>>' in script):
raise ScriptRunningError("Please insert a space before and after"
" the redirect $ %s" % str(script))
以上をまとめて、こんな感じになりました。
subprocessモジュールの標準出力をファイルへ書き出す
Pythonからシェルコマンドをたたくなら、サブプロセス管理の subprocess モジュールを使うことが推奨されているようです。今回は、走らせたコマンドの標準出力をファイルへ書き出します。コマンドには、UNIXコマンドだけではなく環境変数(PATH)として登録されたコマンド(例えば、 tree や gmt )も使えるようにします。以下で扱うモジュールは、すべてPython標準ライブラリに含まれています。
- ターミナル上で入力するコマンドをそのままPythonで処理
コマンドをshlexで単純なリストに成形してsubprocessへ渡す
>>> import shlex
>>> shlex.split('ls -a')
['ls', '-a']
>>> shlex.split('gmt --version')
['gmt', '--version']
>>> shlex.split('wkpdf --source http://www.apple.com --output apple.pdf')
['wkpdf', '--source', 'http://www.apple.com', '--output', 'apple.pdf']
- 環境変数を引き継いで、ターミナル上で走るコマンドはすべてPythonで処理
環境変数をos.environとしてsubprocessへ渡す
subprocess.Popen(..., env=os.environ, ...)
- 標準出力はファイルオブジェクトで受け取る
with構文にします
output_file = 'sample.txt'
with open(output_file, 'w') as f:
subprocess.Popen(..., stdout=f, ...)
以上をまとめて、こんな感じになりました。
python-twitter + wheezy.templateでツイートを表示
だいぶ前の python-twitter + jinja2でツイートを表示 をwheezy.templateでやってみる。
ゆくゆくはwheezy.webを使えるようになりたいので、まずはwheezy.templateの練習。