質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2034閲覧

python3.xでsubprocessrun(wget)を使用しデータをDLしたい。returncode 0であるのにもかかわらずDLが実行されておらずファイルが見つからない。

rose-james

総合スコア2

zsh

zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/24 06:50

前提・実現したいこと

pythonでsubprocess.runを使用してサイトからデータをダウンロードしようとしています。
(もともとシェル(zsh)でやっていたことをpythonで実現したいです。)

発生している問題・エラーメッセージ

check = True でreturncode 0 が返ってくるにもかかわらずデータがダウンロードされていない。
エラーメッセージではないですが、以下返ってくるメッセージです

Out[26]: CompletedProcess(args=['/bin/zsh', 'wget', '-q', '-nH', '--cut-dirs=6', '-r', '-l0', '-c', '-N', '-np', '-R', "'index*'", '-erobots=off', '--retr-symlinks', '目的のURL'], returncode=0)

該当のソースコード

#!/user/bin/env python3 #-*- coding utf-8 -*- import subprocess cmd = '/bin/zsh wget -q -nH --cut-dirs=6 -r -l0 -c -N -np -R \'index*\' -erobots=off --retr-symlinks' + 目的のURL exec = cmd.split(" ") subprocess.run(exec, shell = True, check = True)

試したこと

1:
os.getcwd()でダウンロードしたいカレントディレクトリであることを確認

2:
cmd の頭の /bin/zsh を消すとreturncodeが1

3:
shell = True を消すとreturncode127

補足情報(FW/ツールのバージョンなど)

python3.5.6
spyder

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

完全な回答ではありませんが、私のところでは

python

1import subprocess 2subprocess.run(['/usr/bin/wget', 'https://docs.python.org/ja/3/'], check = T 3rue)

というコードでは正常にダウンロードできました。
同様にするとダウンロードできるかどうかを試してみてはいかがでしょうか。

投稿2021/05/24 10:22

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

/bin/zsh wget ~~~
は、「カレントディレクトリにあるwgetというファイルをzshスクリプトだとみなして引数~~で実行する」という意味になるので、wgetコマンドは実行されません。

cmd の頭の /bin/zsh を消すとreturncodeが1

ということからwgetで何らかのエラーが発生してるわけですが、-qを付けてメッセージを出さないようにしているのでその原因が分かりません。

Python

1import subprocess 2 3cmd = 'wget -nH --cut-dirs=6 -r -l0 -c -N -np -R \'index*\' -erobots=off --retr-symlinks' + 目的のURL 4subprocess.run(cmd, shell = True, check = True)

と、エラーメッセージを表示させて原因を探りましょう。

投稿2021/05/24 10:00

編集2021/05/24 10:34
otn

総合スコア84533

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rose-james

2021/05/26 05:11 編集

回答ありがとうございます。 /bin/zsh/とshell = Trueの両者を消したところダウンロードに成功しました。 次に以下の問題が発生してしまいました。 -R \'index*\' を指定しているにもかかわらずindex.html~といういくつかのファイルがダウンロードされてしまう。 もともとターミナル上では ``` Python -R 'index*' ``` としていたので、\ に問題があるのでしょうか? 可能であればご教示いただきたいです。 よろしくお願いいたします。
rose-james

2021/05/26 05:14

失礼いたしました。 shell = True を消さずに実行したところ、正常にDLされました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問