螺旋階段を一歩ずつ

研究のタネから趣味のネタまで

MacにThe Generic Mapping Toolsをインストールして地図を描く

この前の記事 で用いた gmt のMacへのインストール方法を紹介します。そして、ちょっとした地図を描いてみます。

Read more...

subprocessモジュールでリダイレクト(>, >>)を実現する

昨日の記事 では、単純に標準出力をファイルへ書き出した。しかし、ターミナルで同じことをしたい場合はリダイレクト( > , >> )を使うのが普通だと思う。

$ gmt --version > sample.txt
$ gmt --version >> sample.txt
リダイレクトとは
シェル・スクリプト・リファレンス - 【 リダイレクトとは 】:ITpro

ならばということで、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))

以上をまとめて、こんな感じになりました。

Read more...

subprocessモジュールの標準出力をファイルへ書き出す

Pythonからシェルコマンドをたたくなら、サブプロセス管理の subprocess モジュールを使うことが推奨されているようです。今回は、走らせたコマンドの標準出力をファイルへ書き出します。コマンドには、UNIXコマンドだけではなく環境変数(PATH)として登録されたコマンド(例えば、 treegmt )も使えるようにします。以下で扱うモジュールは、すべて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, ...)

以上をまとめて、こんな感じになりました。

Read more...

python-twitter + wheezy.templateでツイートを表示

だいぶ前の python-twitter + jinja2でツイートを表示wheezy.templateでやってみる。

ゆくゆくはwheezy.webを使えるようになりたいので、まずはwheezy.templateの練習。

Read more...

tweepyでリアルタイムハッシュタグ検索

この前の python-twitterでハッシュタグ検索 をリアルタイムでやってみる。

使うパッケージは tweepy

Read more...

python-twitter + jinja2でツイートを表示

昨日の記事 で取得したツイートをHTMLで表示したいと思います。

使うパッケージは jinja2

Read more...