- ベストアンサー
curlの実行結果をプログラムでリアルタイム取得
プログラムでcurl コマンド(-# オプションで進捗状況表示)実行し、 ファイル転送時に表示される進捗状況をリアルタイムに取得したいと思っています。何か良い方法はありますでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
あ、No.3でまた間違えた。 (No.3は消去依頼を運営に出すので無視してほしい) 度々で、お詫びする。 $ curl http://hoge.hoge/hoge.data >hoge.data で、ダウンロードしたデータは標準出力に出てhoge.dataに記録され、コンソールにはプログレスメーターが表示される。 (標準エラー出力の内容がコンソールに出る) $ curl http://hoge.hoge/hoge.data >hoge.data 2>prog.txt こうすると、プログレスメーターの内容がリダイレクトされて、prog.txt に入る。
その他の回答 (3)
- thunderkarasu
- ベストアンサー率34% (265/762)
正誤訂正 No.1の回答が間違っていたようで、お詫びして訂正する。 誤 $ curl http://hoge.hoge/hoge.data >hoge.data 正 $ curl http://hoge.hoge/hoge.data 2>hoge.data
- thunderkarasu
- ベストアンサー率34% (265/762)
プログレスバーは「標準出力」(stdout)に出るのではなく、「標準エラー出力」(stderror)に出るものなので $ curl -# -T test.txt -u user:pass ftp://localhost/ftp > prog ではなく、 $ curl -# -T test.txt -u user:pass ftp://localhost/ftp 2> prog になる。 「2>」とすることで、標準エラー出力の内容がリダイレクトされる。 標準出力と標準エラー出力が異なるものであることに、注意を。 [標準エラー出力 ZDNet Japan] https://japan.zdnet.com/glossary/exp/%E6%A8%99%E6%BA%96%E3%82%A8%E3%83%A9%E3%83%BC%E5%87%BA%E5%8A%9B/?s=4 この辺りのことについては、Unixシェルの基本中の基本でもあるので、Unixシェルについての本やドキュメント等を参照されたい。 また、この考えの思想的な支えとして「UNIX哲学」というものがあるので、併せて参照されると良い。 (Wikipediaの当該項が、程々に詳しい) ※ 書籍であれば、オーム社刊「UNIXという考え方―その設計思想と哲学 」(原題: The UNIX philosophy / 1994年)というものが、バイブル的なものとして昔から奨められている(良書だ)。
- thunderkarasu
- ベストアンサー率34% (265/762)
curlは標準出力先をパイプやリダイレクトとすると、標準エラー出力にプログレスメーター(またはプログレスバー)を表示するので、その標準エラー出力をパイプ・リダイレクト先のプログラムで得ればいい。 $ curl http://hoge.hoge/hoge.data >hoge.data getしたデータはリダイレクトでhoge.dataに記録され、プログレスメーターが標準エラー出力に出る(コンソールに表示される)。 プログレスバーにするには、オプション「-#」または「--progress-bar」を指定する。 その他も含め、詳しくはcurlのmanの参照を。
補足
下記コマンドを実行してみてprogファイルを確認してみたのですが何も記録されていませんでした。 「man curl」を確認したところ下記のように書いてありFTPのアップロードには対応していないようでした。 「If you want a progress meter for HTTP POST or PUT requests, you need to redirect the response output to a file, using shell redirect (>), -o, --output or similar. It is not the same case for FTP upload as that operation does not spit out any response data to the terminal.」 (実行したコマンド) curl -# -T test.txt -u user:pass ftp://localhost/ftp > prog
お礼
ご丁寧に回答ありがとうございます。 今、試す環境にないため、明日、早速試してみたいと思います。ありがとうございました。