2012-01-24 10 views
4

-Pまたは-Oのいずれかを単独でwgetと使用すると、すべてが広告として動作します。wget:--directory-prefixと--output-documentの両方を指定する方法

$: wget -P "test" http://www.google.com/intl/en_com/images/srpr/logo3w.png 
Saving to: `test/logo3w.png' 

$: wget -O "google.png" http://www.google.com/intl/en_com/images/srpr/logo3w.png 
2012-01-23 21:47:33 (1.20 MB/s) - `google.png' saved [7007/7007] 

しかし、2つの原因wgetを組み合わせること-Pを無視します。

$: wget -P "test" -O "google.png" http://www.google.com/intl/en_com/images/srpr/logo3w.png 
2012-01-23 21:47:51 (5.87 MB/s) - `google.png' saved [7007/7007] 

私はアイテム1について、(カウントループを介して生成された)(URLの最後のチャンクによって生成された)ディレクトリとファイル名ようhttp://www.google.com/aaa/bbb/ccc収率file = /directory/filename、または両方の変数を設定しました、/ccc/000.jpg

コードにこれを代入:
Popen(['wget', '-O', file, theImg], stdout=PIPE, stderr=STDOUT)
wgetはサイレント(ループの各反復で)失敗します。

Iは-dデバッグと-a log.logをログをオン、各反復印刷
DEBUG output created by Wget 1.13.4 on darwin10.8.0.

Iは-Ofileを削除すると、動作は正常に進行します。

私の質問は次のとおりです。 は
Aに方法はあります)、それを起こさない/ -charactersを含む-Oに文字列を挿入します)-P-Owget中(推奨)または
Bの両方を指定します失敗する?

ご協力いただければ幸いです。

答えて

1

あなただけ-Owgetのにdir/000.jpgを渡す必要があります。

import subprocess 
import os.path 

subprocess.Popen(['wget', '-O', os.path.join(directory, filename), theImg]) 

それはあなたがすでにこれに似た何かをやっていたかどうか、あなたの質問から完全に明確ではないですが、あなたは、それはまだ失敗した場合、私は考えることができます-O

  • 引数が、それは持っていないため、wgetが失敗すること、大手/が含まれています。二つの理由のランダムにディレクトリを作成する許可を/(root)にしてください。

  • wgetに書き込むディレクトリが存在しません。 Python標準ライブラリでos.mkdirを使用して最初に作成することで、存在することを確認できます。

また、あなたが直接、エラーを見ることができるようにPopen呼び出しからの引数stdout=stderr=を削除してみてください、またはPythonのを使用して印刷することができます。wget.downloadの

+0

私は「DIR/000.jpg」を「-O」、wgetのリターンを渡すためにしてみてくださいただし、何も見つからない場合、-Pは常にディレクトリを作成します。私はこれに対してos.mkdirを実装することができましたが、より洗練されたソリューションを探していました...あなたのご意見ありがとうございました。 –

+0

@ JoshWhittington、あなたが探している解決策は簡単ではありません。 'wget'は' -O'が渡されたときに '-P'を無視します。個人的には、 'os.mkdir'の使用に関して、不愉快なことは何もありません。がんばろう。 –

1

ドキュメント(..):あなたがしたい場合

wget.download(url, path_to_output_file) 

def download(url, out=None, bar=bar_adaptive): 
    """High level function, which downloads URL into tmp file in current 
    directory and then renames it to filename autodetected from either URL 
    or HTTP headers. 

    :param bar: function to track download progress (visualize etc.) 
    :param out: output filename or directory 
    :return: filename where URL is downloaded to 
    """ 
    ... 

がカスタムファイル名を持つ特定のディレクトリ(既存の)にファイルをダウンロードするには、次の呼び出しを使用します既に存在しない場合は、ディレクトリ作成を抽象化するための関数呼び出し。次に、次のように使用する:

urllib.urlretrieve(url, path_to_output_file) 
0

@Jaydevからこのコード行は、実際に見事に動作します:「そのようなディレクトリ」

wget.download(url, path_to_output_file)

関連する問題