2012-02-14 13 views
1

LinuxでQtアプリケーションを開発しています。私は、ターミナルにLinuxコマンドを渡したかったのです。それはうまくいきましたが、私はこの特定のコマンドのために端末からの応答を得たいと思っています。例えば私のアプリケーションからLinux端末の値を取得する

ls -a 

あなたは、このコマンドは現在の作業ディレクトリのディレクトリとファイルが一覧表示されます知っているよう。私は今私のアプリケーションにls呼び出しから返された値を渡したいと思います。これを行う正しい方法は何ですか?

+1

「QProcess」[here](http://stackoverflow.com/a/5893756/167814)の作業例があります。 –

答えて

3

QProcessは、プロセスを生成して結果を読み取ることができるqtクラスです。そのページのコマンドの結果を読むための使用例があります。

+0

私は関連するセクションが "チャネルを介してコミュニケートする"ということを追加したいと思います。 –

+0

私は試しましたが、できません。 QString program = "ls -a"; QStringList引数。 引数<< "-a"; myProcess-> start(program、arguments); QByteArray result = myProcess-> readAllStandardOutput(); – thehilmisu

+0

あなたのプログラム名は間違っています。 'ls -a'は私が見たLinuxシステムには存在しません。プログラムは 'ls'、' -a'は引数です。 – sarnold

0

のpopen()、あなたは、ファイル記述子のようにそれを読むことができますLinuxのSYSTERM、リターンFILE *のAPIはerhaps YOUP役立つこと

+0

qtはpopen()のように同じ関数apiを持つかもしれません。 – holycow

0

解析ls(1)出力が危険である - 。で面白い名前を持ついくつかのファイルを作ります現在の作業ディレクトリにのファイルを作成します

touch "one file" 
touch "`printf "\x0a\x0a\x0ahello\x0a world"`" 

を:ディレクトリとそれをテスト。私はあなたの試みがls(1)の出力を解析しないとは思えません。 人の人間に結果を表示している場合(ただしファイル名にls(1)という出力が含まれていると人間は非常に混乱しますが)、explorer.exeのようなものを表示しようとするとファイルシステム内のファイルの表現をFinder.appとすると、はひどく壊れていますです。

代わりに、opendir(3),readdir(3)、およびclosedir(3)を使用して、ディレクトリエントリを自分で読み取ってください。これは、より安全で、より移植性があり、(副次的なメリットとして)若干優れたパフォーマンスを発揮します。

関連する問題