2009-11-07 4 views
6

私はシンプルなGUI Pythonスクリプトを使って、システム上で簡単な作業をしています。一部のパッケージにはapt-get installが含まれています。進捗バー用のapt-get installの出力の解析

これが続いている間に、端末のapt-getのインターフェイスに表示されている少しのパーセンテージを使用して、ダウンロードの進行状況を更新するプログレスバーを表示します。

BUT!私は進行状況を取得する方法を見つけることができません。 apt-getの出力をパイプまたはリダイレクトすると、各パッケージの "完了したダウンロード"メッセージを表示する静的な行と、スクリプト内でsubprocess.Popen()を読むための静的な行だけが表示されます。

ダウンロードしたファイルのパーセンテージを得るには、apt-getの出力からどのように読み込むことができますか?

答えて

3

私がよく言ってきたように、連続出力を得る必要があるときにサブプロセスを実行するには、pexpectサブプロセスなどを使用します。 pexpectはサブプロセスがサブプロセスをターミナル上で実行していると信じるように欺くので、サブプロセスは実際のターミナルで出力するだけの出力を提供します。そして、それを捕まえて、あなたが望むあらゆる種類のファンシー出力に変換できます! )

+0

これは私のCポートでもposix popen()を使ってうまくいく可能性がありますか?または同様の方法がありますか? –

+2

'popen'はサブプロセスにその出力がパイプであることを知らせますので、あなたは"完全なバッファリングされていないリアルタイムの出力とにかくpls! "を要求するのに十分なコマンドを除いて、おそらく運が悪いでしょう。私はapt-getがそのエリートグループにいるとは思わない。 Linuxの下でCで "偽端末"を実装するには、pty(7)のマニュアルページから始めます。 http://linux.die.net/man/7/空で - そして、幸運にも(たくさんの作業が必要になります!) –

5

apt-getの出力を解析する代わりに、python-aptを使用してパッケージをインストールすることができます。 AFAIKには、進捗状況を報告するためのモジュールもあります。

+0

/usr/share/doc/python-apt/examples/progress.pyを見てください。 – unutbu

+0

Pythonを使わずに、libaptの巨大な混乱を避けるための方法はありますか? –