Windows で実行している Qt プログラムで奇妙なエラーが発生しました。プログラムは QProcess を使用して、2 つの引数を持つ子プロセスを生成します。QProcess::start() メソッドに渡されるプログラムと引数の形式は次のとおりです。
"batchfile.bat" "--option1=some_value" "--option2=some_other_value\with_a\path"
何らかの理由で、等号を処理するためにこれらのオプションがバッチファイルに到達するまでに、スペースに変換され、次のようになります。
"batchfile.bat" "--option1 some_value" "--option2 some_other_value\with_a\path"
このため、処理は失敗します。等号がスペースに置き換えられる原因は何ですか? Qt ダウンロード ページにある QT 4.6.3 フレームワークの mingw ビルドを使用しています。
編集:これが実際のコードです。私はそれを書いたわけではありません (私は完全な Qt 初心者です) が、それを機能させるために努力する必要があります。これは、RHEL (4 および 5)、OS X、および Windows の 2 つのバージョンで実行される自動ビルド システムの一部です。また、Windows 以外のすべての場所で問題なく動作します。
QProcess sconsProcess;
sconsProcess.setWorkingDirectory(build.getBuildLocation());
sconsProcess.setProcessChannelMode(QProcess::MergedChannels);
qDebug()<<"Starting scons process:"<<build.getSconsLocation()<<QString("--variant=%1-%2").arg(build.getOs()).arg(build.getVariant())<<
QString("--source-release=%1").arg(build.getSettings().getSetting("sourceReleaseLocation", QStringList()<<"BUILDLOCATION"<<"VERSION",
QStringList()<<build.getBuildLocation()<<build.getBuildPackage().getVersion()).toString());
sconsProcess.start(build.getSconsLocation(), QStringList()<<QString("--variant=%1-%2").arg(build.getOs()).arg(build.getVariant())<<
QString("--source-release=%1").arg(build.getSettings().getSetting("sourceReleaseLocation", QStringList()"BUILDLOCATION"<<"VERSION",
QStringList()<<build.getBuildLocation()<<build.getBuildPackage().getVersion()).toString()));
qDebug()<<"Source release build process started";
Windows で変換される実際の値 (最初の qDebug() 印刷呼び出しで出力されるビット) は次のとおりです。
DEBUG: scons プロセスを開始しています: "V:\Glast_Software\Toaster\tools\Python2.5\Scripts\scons-1.3.0.bat" "--variant=Windows-i386-32bit-vc71-Debug" "--source- release=V:\Glast_Software\Toaster\ReleaseManagerBuild\Windows-i386-32bit-vc71\Debug\ScienceTools\LATEST-1-3163\ScienceTools-LATEST-1-3163-source.zip"
ただし、scons-1.3.0.bat 内では (実行されたすべてのコマンドをエコーするようにしました)、渡されたパラメーターは次のようになります。
"--variant Windows-i386-32bit-vc71-Debug" "--source-release V:\Glast_Software\Toaster\ReleaseManagerBuild\Windows-i386-32bit-vc71\Debug\ScienceTools\LATEST-1-3163\ScienceTools-LATEST -1-3163-source.zip"
等号がありません。
編集 (2010 年 6 月 29 日) : このシステムは、LSF バッチ キューイング システムを使用して小規模な Windows バッチ ファームで実行するように設計されていることを付け加えておきます。プロセスがバッチ ジョブとして実行されている場合にのみ失敗します。バッチ マシンの 1 つでコマンド ラインからこのプログラムを実行すると、完全に機能し、本来の動作を正確に実行します。なので、環境の問題かもしれません。