少し前からPythonスクリプトを勉強している
サンプルになるスクリプトはネットでいろいろと入手可能なのだが
困るのが文字コード
windowsのコマンドプロンプトはchcp 1200(UTF-16)が使用できない
(なぜにwindowsはchcp 1200に対応しないのだろう?)
このためコンソール出力がないPythonw.exeを使用するのだが、
一見うまく動いているように見えて途中で異常終了してしまったりと
あまりよろしくない
いろいろと調べたのだがスキル不足は否めず・・・
諦めてcygwinをインストールすることに
cygwinはインストール時のオプションでPythonをインストールするか選べる
cygwinのインストール終了後、試しにPythonスクリプトを使用してみると
あれだけ苦労したスクリプトが嘘のように動く
やっぱ餅は餅屋だわ
せっかくwindows下でunix環境を動かすのだからPPxからバッチを起動して
cygwinのコマンドを動かせないかとググる
bashをキックすれば良いと言うことがすぐに引っかかった
さらにPPxからキックできるようにスクリプトを作成
bashはUTF-8(BOMなし)しか受け付けないのでADODB.Streamで加工
※bashのパスは環境変数pathに追加済み
//!*script
// cygwin(bash)キックルーチン Ver 1.0
// 使用プログラム cygwin(bash)
// ============================================================
// 変数宣言
var FList = ''; // PPxレスポンスファイル名
var iFile = ''; // 入力ファイル名フルパス
var iDir = ''; // 入力ディレクトリワーク
var command = ''; // PPxコマンドワーク
var WSHObj = ''; // wshシェル
var RetCD = ''; // 戻り値
var StmObj1 = ''; // スクリプト出力ワーク(BOM付き)
var StmObj2 = ''; // スクリプト出力ワーク(BOMなし)
// 処理対象ファイル名を取得しcygwin用に加工
iFile = PPx.Extract("%FDN%\\%R");
iFile = iFile.replace(/:/g,''); // :を取る
iFile = iFile.replace(/\\/g,'\/'); // \を/に置換
iFile = '/cygdrive/' + iFile; // Prifix付与
iDir = iFile.replace(/\/[^\/]*$/,''); // 一番最後の/以降で/を含まない文字列を削除
// 作業用ファイル名を取得するためレスポンスファイル作成し即削除
FList = PPx.Extract('%a*FDN');
PPx.Execute('*delete "' + FList + '"');
// スクリプトファイル作成
StmObj1 = new ActiveXObject('ADODB.Stream');
StmObj2 = new ActiveXObject('ADODB.Stream');
StmObj1.type = 2;
StmObj1.charset = 'utf-8';
StmObj1.LineSeparator = 10; // adLF
StmObj1.Open();
StmObj1.WriteText('#!/bin/bash',1);
StmObj1.WriteText('cd "' + iDir + '"',1);
※ここにファイル処理用のコマンドを入れる※
StmObj1.WriteText('exit 0',1);
StmObj1.SaveToFile(FList,2); // 1:新規作成(あるとエラー) 2:ある場合は上書き
StmObj1.Close();
// BOM除去
StmObj1.Type = 1;
StmObj2.Type = 1;
StmObj1.Open();
StmObj2.Open();
StmObj1.LoadFromFile(FList);
StmObj1.Position = 3;
StmObj2.Write(StmObj1.Read());
StmObj1.Close();
StmObj2.SaveToFile(FList,2); // 1:新規作成(あるとエラー) 2:ある場合は上書き
StmObj2.Close();
// スクリプトファイル名をcygwin用に加工
FList = FList.replace(/:/g,''); // :を取る
FList = FList.replace(/\\/g,'\/'); // \を/に置換
FList = '/cygdrive/' + FList; // Prifix付与
// bashキックコマンド生成
command = 'bash --login -i -c ' + ' "' + FList + '"';
// PPx.Echo(command);
// bash呼出
WSHObj = new ActiveXObject('WScript.Shell');
RetCD = WSHObj.Run(command,1,true); // true:終了待機する
WSHObj = '';
※終了コードチェックはここにいれる※
// 後処理
PPx.Quit();