• ベストアンサー

curlの実行結果をプログラムでリアルタイム取得

プログラムでcurl コマンド(-# オプションで進捗状況表示)実行し、 ファイル転送時に表示される進捗状況をリアルタイムに取得したいと思っています。何か良い方法はありますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 に入る。

unko347
質問者

お礼

ご丁寧に回答ありがとうございます。 今、試す環境にないため、明日、早速試してみたいと思います。ありがとうございました。

その他の回答 (3)

回答No.3

正誤訂正 No.1の回答が間違っていたようで、お詫びして訂正する。 誤 $ curl http://hoge.hoge/hoge.data >hoge.data 正 $ curl http://hoge.hoge/hoge.data 2>hoge.data

回答No.2

プログレスバーは「標準出力」(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年)というものが、バイブル的なものとして昔から奨められている(良書だ)。

回答No.1

curlは標準出力先をパイプやリダイレクトとすると、標準エラー出力にプログレスメーター(またはプログレスバー)を表示するので、その標準エラー出力をパイプ・リダイレクト先のプログラムで得ればいい。 $ curl http://hoge.hoge/hoge.data >hoge.data getしたデータはリダイレクトでhoge.dataに記録され、プログレスメーターが標準エラー出力に出る(コンソールに表示される)。 プログレスバーにするには、オプション「-#」または「--progress-bar」を指定する。 その他も含め、詳しくはcurlのmanの参照を。

unko347
質問者

補足

下記コマンドを実行してみて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

関連するQ&A

  • PHPでcurl実行

    お世話になります。 PHPでcurlを使用して外部のサーバ上にあるプログラムを実行しようとしています。 $command = "curl -m 10 http://~~?param=~~~"; $result = shell_exec(command); このようにプログラム上で記述しているのですが、うまく動作しません。 正常な動作としては、処理を行った後に「TRUE」という文字列が返ってくるはずなのですが、 画面上に$resultの値を出力してみると、「~~~</body></html>」と、 なぜかHTMLタグが返ってきており、正常な処理が行われません。 ためしにコマンドライン上より curl -m 10 http://~~?param=~~~ を実行すると、「TRUE」という文字が表示されてきちんと動作しますので、外部に置いてある プログラムの問題ではなく、こちらで作成したPHPでの記述の仕方に問題があると思われるのですが どこを修正するべきか、アドバイス等いただけないでしょうか。

    • 締切済み
    • PHP
  • Runtime.execでの実行結果の取得

    初歩的な質問ですいませんが、execでバッチファイルを実行し、 その結果を取得したい場合、getInputStreamとgetErrorStream以外に 取得する方法はあるのでしょうか? バッチファイルを単独で実行した場合に画面出力されるエラーが、 なぜか取得できないでいます。 ただ、実行しているコマンドはDOSコマンドではなく、 別アプリのEXEファイルになります。 (DOSコマンドの結果は正常に取れました)

    • ベストアンサー
    • Java
  • Objective-CでCURL

    お世話になっております。 CURLコマンドを使用して、FTPでサーバにファイルの送信・削除を行いたいです。 アップロードは出来ますがサーバ上の不要なファイルを削除出来ません。 いろいろ調べてみましたが、FTPで削除に関するオプションが見当たりません。 方法をご存知の方が居られましたら、ご教授をお願いいたします。 よろしくお願いいたします。

  • SQL実行結果取得

    バッチファイルにて、 sqlplusコマンドにより*.sqlファイルを実行し、 SQL文を発行していますが、 実行結果(処理件数)をコマンドプロンプト上 に表示したいのですが、どなたか。手法をご存知では ないでしょうか?

  • APTでcurl-develパッケージが見つからず

    Ubuntu 10.10にて、curl-develパッケージをAPTでインストールしようと、以下コマンドを実行したのですが、「E:パッケージ curl-devel が見つかりません」となってしまいます。  $ sudo apt-get install curl-devel パッケージ名など、どこか間違っているのでしょうか? 間違っているとしたら、正しいインストール方法をご教示願います。

  • 実行結果をSwingで表示

    http://godwood.allnet.ne.jp/vioret/j2seobex.htmlでDLできるOBEXライブラリに付属しているコマンドベースでファイルを転送することができるサンプルプログラム(obex.java)の実行結果などをSwing上(JTextAreaなどに)で表示させたいと考えているのですが、そのような事は可能でしょうか?? ご教授お願いします。

    • ベストアンサー
    • Java
  • プログラム(*.exeファイル)を実行できない!?

    はじめまして。早速ですが非常に困っています。 インターネットの掲示板でダウンロードしたファイルをクリックしたらどうもそれがフォルダのアイコンをした悪質な実行ファイルだったみたいで、 なにやら「メールを送信しています...」といったメッセージとともに何か作業をしたかと思うと、突然、 InternetExplorerとOutlookExpress、それとマイ コンピュータを除くすべてのプログラム及びショートカットが実行できなくなってしまい、ウイルススキャンもシステムの復元もコマンドプロンプトもヘルプとサポートまでもができない状態にあります。 具体的には、 ・アイコン表示が消える ・ダブルクリックすると  "指定されたファイルに対してこの操作を行うプログラムが関連付けられていません。[フォルダ オプション]コントロール パネルでプログラムを関連付けてください。"  というエラーメッセージが出る といった具合です。そこで、[マイ コンピュータ]から[フォルダ オプション]→[ファイルの種類]、と操作して何とかしようと試みたのですが、一覧にはもともとプログラムであるexeファイルの名前は無く、途方に暮れております。 また、プログラムを直接起動することはできませんが、テキストファイルやメディアファイルなど、それぞれのプログラムに関連付けられたファイルは開くことが可能なので、プログラム自体が削除された訳ではないと思われます。 長々と申し訳ありませんが、対処方法のわかる方、宜しくお願いします。

  • プログラムが実行出来ない

    拡張子がexeの物や、CDをインストールしようとすると次の様なメッセージが出て、 プログラムが実行出来ません。 ↓ 指定されたファイルに対してこの操作を行うプログラムが関連付けられていません。[フォルダ オプション]コントロールパネルでプログラムを関連付けてください どうすれば実行出来るのでしょうか? どなたか教えて下さい。 よろしくお願い致します。

  • PHPのcurlの結果が展開されない

    PHPのcurlやsnoopyといったライブラリを使用して、外部サイトと自動で連携できるようなツールをつくりたいと思っています。 自動でログインさせるところまではできたのですが、ログイン後遷移したページの結果文字列(html)がテンプレートファイルのまま返ってきてしまっており、内容が取得できません。 結果の文字列は <script type="text/x-handlebars-template"> ~ </script> で囲まれており、中身は <div class="header"> <div class="header_aa"> {{#user}}{{> profile}}{{/user}} </div> などとなっており、テンプレートファイルの記述のままで、変数が展開されていない状態です。 欲しいのはこれが展開(解釈)された後の結果文字列です。 名前からしてhandlebars.jsのテンプレートファイルを使用しているのは分かるのですが、なぜこれは展開されないのでしょうか? PHPプレーンのcurlでアクセスしても、snoopyを使用してアクセスしても結果は同じです。 オプションでもこれを解決するようなものが見当たらず、行き詰まっております。 どうすれば展開後の結果が取得できるのか、ヒントがあれば教えて下さい。 なにとぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • tail & grep の結果表示をリアルタイムに表示させる方法

    tail & grep の結果表示をリアルタイムに表示させる方法 現在以下のようなコマンドを実行しています。 tail -f ログファイル名 | grep -E "正規表現" | grep -E -v "正規表現" で、リアルタイムに表示してほしかったのですがだいぶ遅れてでないと出力されません。 正確にはいろいろ操作をしてログを多めに出さないと出力されないようです。 どうやら画面出力までにはバッファされているようです。 どこでバッファされているか分からないのですが、 とにかくタイムラグ無く(もしくは少なく)リアルタイムに出すようにしたいです。 tail & grep の結果表示をリアルタイムに出力する方法を教えてください。 よろしくお願いします。