端末を生成する GUI のサブプロセスを生成しようとしています。この端末で生成されたデータ (stdout と stderr) を、表示されるウィンドウと設定されたログ ファイルに表示したい。コマンドをシェルに直接入力すると、意図したとおりに機能しますが、開始コマンドとして QProcess に提供されると、実際にはファイルに何も書き込まれません。
例: ユーザーがバイナリをインストールしていない場合、コマンドが見つからなかったことを bin.log に書き込む必要があります。生成された QProcess の環境を実行中の親プロセスと同じになるように設定し (bash などを見つけることができるように)、QProcess.start() メソッドを呼び出す前に作業ディレクトリを設定しました。次のテストケースを作成しました。
gnome-terminal --title 'Sub-Terminal' -e 'bash -c "foo [args to foo] |& tee foo.log"'
Qtでは、次のことを行います。
QProcess *child = new QProcess(this);
QString cmd = "gnome-terminal --title 'Sub-Terminal' -e 'bash -c \"foo [args to foo] |& tee foo.log\"'";
child->setProcessEnvironment(<process environment I have created before>);
child->setWorkingDirectory(<current working dir>);
child->start(cmd);
...
端末を生成しますが、foo.log にはデータを書き込みません。私も次のことを試しました:
QProcess *child = new QProcess(this);
QString prog = "gnome-terminal"
QStringList args;
args << "-x" << "bash" << "foo" << "[foo's arguments]" << "|&" << "tee" << "foo.log";
// set the process env and working dir
child->start(prog, args);
これを解決する方法について誰かアドバイスはありますか?QProcess.setStandardErrorFile(foo.log) と QProcess.setStandardOutputFile(foo.log) を使用して stdout と stderr をリダイレクトしようとしましたが、gnome 端末自体から stdout をリダイレクトしているようです (これは何もありません)。