マグカップの裏

プログラムとか、思ったこととか、料理とか

Rubyで外部のexeファイルを実行した話

Rubyでちょっと面倒な処理を自動化しようとして色々奮闘した休暇だったのだけど、その際外部のexeファイルを引数つきで実行させるときにちょっとはまったのでメモがてら記事に。

まず、私が書いているスクリプトはymlに設定を書いていた。実行ファイルのパスとか、実行ファイルに投げたいファイルのおいてあるディレクトリのパスとか。

exe : C:\exe\to\path\Execute.exe
src : C:\src\to\path\
dst : C:\dst\to\path\

そんでもってこれを普通に読み込んでた。

require 'yaml'

config = Yaml.load('C:\yaml\to\path\yaml.yml')

srcPath = config['src']
.....


こんな感じ。
なんの編鉄もないコードですよねえ。
で、exeを実行しようとしてこんなことをした。

execute = exePath + " -i " + srcPath + " -o " + dstPath
'#{execute}'

普通これで実行できます、exeは起動してソースも読んだようでした。
でもなぜかうまく進まない。exeは動画ファイルを読み込んで変換してくれるはずのものだったのですがなぜか読み込むだけで変換が進まない。

結果こんな遠回しなことして解決。

tmpPath = open(srcPath,rb)
srcPath = File.expand_path(tmpPath)
tmpPath.close

tmpPath = open(dstPath,wb)
dstPath = File.expand_path(tmpPath)
tmpPath.close

execute = exePath + " -i " + srcPath + " -o " + dstPath
'#{execute}'

これだと実行できました。ディレクトリを変えてみたりダブルクォーテーションでくくってもだめだったんで原因はわかりませんが、とりあえずこれで動くこともあるんですね。
たぶんですが、最初のsrcPathに格納されてた値が問題なんだと思うけど…そこは変えたくなかったので。


あほなエンジニアの引っ掛かったことに対するぼやきであった。