2014年10月8日水曜日

Windows上のnode.jsでchild_process.spawn()する際の、とっても低レベルなハマりポイント

次第に、無人の荒野をひた走っているようなカンジになってきましたが…。
単純に、自社システムにとって最も理想的な動作を最もリーズナブルに開発できる道を求めて進んでいるだけなのに…。
なぜに、気がつけば「誰もいない予感!」みたくなってしまうのであろうか。




あたりを参考に。

Windowsというかコマンドプロンプトちゃんとわかってる方ならこんなとこでハマることはもちろんないとおもいますが。

僕はそういうひとではないので、ここで2時間ぐらいハマりました。

child = spawn 'copy', ['D:\\hoge.eps', 'D:\\hogeb.eps']
動作しません。理由:copyは実行形式ではないので。
※copyするのにspawnするひとはいないとおもいますが、簡単な例ってことで

child = spawn 'cmd', ['/c', 'copy D:\\hoge.eps D:\\hogeb.eps']
修正例。動作した。

child = spawn 'cmd', ['/c', 'copy', 'D:\\hoge.eps', 'D:\\hogeb.eps']
動作しない。理由:copyの引数群は、copyの引数であって、cmdの引数ではないので。

wsfPath = 'D:\\Cambodia Dairoku\\141008 WSHスクリプト\\WinSCP.wsf'
filename​ = 'hoge.eps'
remoteDirPath = '/oreore/oredayo/'
remotePath = remoteDirPath + filename
localDirPath = 'D:\\wode difang\\'
localPath = localDirPath + filename
child = spawn wsfPath, [remotePath, localPath]
動作しない。理由:.wsfは実行形式ではないので。

child = spawn 'cscript', ['//nologo', wsfPath, remotePath, localPath]
修正例。動作した。
cmdの場合と異なり、.wsfへの引数群をcscriptへ個々に託せることはcscriptの仕様としてちゃんと文書化されてますので、これで動作します。
パスに空白文字おもいっきし入ってますが、""なくてOKです。

0 件のコメント:

コメントを投稿