Linux で sftp コマンドからの出力を読み取ろうとしています。QProcess を使用して Qt アプリケーションから sftp を呼び出します。しかし、プロセスからの stdout である必要がある read() メソッドからデータを取得しません。プロセスを開始する前にスロットをreadyRead
シグナルに接続したので、プロセスからの出力を見逃すことはありません。
PuTTY の psftp を使用する Windows 上の同じアプリケーションは正常に動作し、必要なすべてのデータを取得できます。Linuxでも同じことが必要です。
プロセス ( sftp user@host
) を開始した後、端末の sftp からパスワード プロンプトを取得しますが、stdout には表示されません。ldd によると、sftp は libncurses を使用しているとのことですが、これが問題だと思います。ncurses を使用せずに sftp のすべての出力を stdout にリダイレクトする方法はありますか?
サンプルコード:
#include <QObject>
#include <QProcess>
class MyClass : public QObject {
Q_OBJECT
public:
MyClass(QObject *parent = 0) : QObject(parent) {
connect(&prc, SIGNAL(readyRead()), this, SLOT(read()));
prc.start("sftp user@host"); // valid user and host in the actual project
}
public slots:
void read() {
qDebug("bytes to read: %d", (int)prc.bytesAvailable());
QString data = prc.readAll();
qDebug("readAll: %s", qPrintable(data));
data = prc.readAllStandardOutput();
qDebug("readAllStandardOutput: %s", qPrintable(data));
data = prc.readAllStandardError();
qDebug("readAllStandardError: %s", qPrintable(data));
}
protected:
QProcess prc;
};
この問題は にのみ存在し、 orsftp
のような他のコマンド(ftp ls/pwd ではなく Linux bash ls/pwd) では機能します。ls
pwd