mml2nsf.py(2009/12/7版)作成上のメモ
「Wine上のppmckで.mmlファイルを.nsfファイルに変換する処理を自動化するPythonスクリプト(2009/12/7版)」のスクリプトを作成した上での幾つかのメモを扱う。
Pythonのshutil
shutilというモジュールを用いると端末シェル上のファイル操作系コマンドのようにPythonで高レベルなファイル操作ができる。
詳しくは
http://www.python.jp/doc/release/lib/module-shutil.html
に載っている。
rmtree()
shutil.rmtree()を用いると引数のディレクトリ以下をまとめて消すことができる。
copy()とcopyfile()
shutil.copy()やshutil.copy2()*1を用いると1つ目の引数の場所にあるファイルを
コピーする。この引数の処理の仕方はcpコマンドに近い。「ファイル/ディレクトリの基本的な操作を行うコマンドについて」も参照。
shutil.copyfile()も似ているが、こちらは2つ目の引数にはディレクトリを指定できず(指定すると「Is a directory」のIOErrorが発生)、新しいパス名の指定のみ受け付ける。
ディレクトリ階層をコピーしたい場合はshutil.copytree()が役に立つ。
move()
shutil.move()を用いると1つ目の引数のパス名を2つ目の引数のパス名へ移動もしくは名前変更することができる。
Pythonで一時ディレクトリを扱う
tempfileモジュールのtempfile.mkdtemp()を用いると一時ディレクトリを作成することができ、この戻り値がそのディレクトリのパス名として得られる。
ppmck関係の処理に関して
スクリプト全体の流れ
MMLファイルの処理
ppmck内のmml2nsf.plの真似をして、とりあえず同じように動作するようになってはいるが、もしかするとどこか処理を読み間違えていたりするところがあるかもしれない*3。
- 一時ディレクトリの作成と移動
- ソース(.mmlファイル)を一時ディレクトリにコピー
- ppmckcで-iオプションにソースを指定して引数(出力ファイル)にsongdata.hという名前の中間ファイルを指定し、この名前で書き出すようにして変換実行
- ここで出力ファイルsongdata.hの他にdefine.inc,effect.hの2つのファイルも生成され、define.incはnesasmにかけるアセンブリ言語ファイル(temp.asmとする)のベースとして使用(名前変更する)
- ppmckの中のnes_includeディレクトリにあるppmck.asmから「effect.h」と「define.inc」のいずれも含まない行だけを一時ファイルtemp.asm(define.incの内容)に追記・「いずれも含まない行」というのはそれぞれのファイルの内容を直接.asmファイルに含めるようにするためで、define.incは既に名前変更で全ての内容を含んでいる
- (もう一方の)effect.hの内容を同様に追記するが、「.include songdata.h」の行はsongdata.hの実際の内容に置き換える(別途このファイルを開いて内容を読んでいき、temp.asmに書き込んでいく)
- 環境変数NES_INCLUDEにnes_includeディレクトリの場所を指定し、-s -rawオプションを付けて.asmファイルをnesasmで処理・環境変数が設定されないとppmck/sounddrv.hが開けず(「Can not open file!」となる)アセンブル*4できない
- 生成された.nesファイルの拡張子を.nsfにして(拡張子より左は元のファイルの名前を利用)出力ディレクトリにコピー
- 一時ディレクトリの後始末(一時ディレクトリの作成後、途中で失敗した処理があった場合も例外の仕組みを用いてfinally節で消す)
関連記事:
- urllibを使用してファイルをローカルに保存する
- urllibでダウンロードしたファイルのタイムスタンプをサーバ上の最終更新日時に合わせる
- Pythonの例外とその処理に関する覚え書き(概要、書式、後始末処理)
- Pythonの例外とその処理に関する覚え書き(ユーザ定義の例外など)
- PythonでZIPファイルを展開する(メモ)
- PythonでZIPファイルを展開する(コード例)
- ファイル/ディレクトリの基本的な操作を行うコマンドについて
- Wine上のppmckで.mmlファイルを.nsfファイルに変換する処理を自動化するPythonスクリプト(2009/12/7版)
- .mmlファイルを監視して上書き保存時にWine上のppmckで.mmlファイルから.nsfファイルへ自動で変換するためのGUIツールを作成(2009/12/17版)
参考URL: