подпроцесс python и wget ask-пароль - PullRequest
0 голосов
/ 19 ноября 2018

Я использую следующий код Python:

import subprocess
host = "ftp://localhost:2121"
p = subprocess.Popen(
  ['wget', '-P', '/tmp/output', '-N', '-r', '-l', 'inf', '--ask-password', '--user', 'anonymous', host],
  stdin=subprocess.PIPE)
p.communicate("password\n")
if p.returncode != 0:
    raise RuntimeError('wget command failed with return code: %d' % p.returncode)  

Похоже, что password не отправлено на wget, так как скрипт зависает, показывая:

Password for user ‘anonymous’: 

Нажатие ввода приводит к выходу wget с кодом ошибки «1»

Нажатие клавиш, а затем нажатие Enter приводит к тому, что wget начинает загрузку, как и ожидалось.

FTP-сервер является локальным и имеет анонимный доступ. Версия Python 2.7.8

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Похоже, что wget читает пароль из tty, а не из stdin. Это не одно и то же!

Команда sudo позволяет переключиться на стандартный ввод

также

Некоторые программы читают напрямую из / dev / tty, а не из stdin. "passwd" например. Поэтому их сложно написать. Ожидается, что это один из способов - он может обмануть программу, предоставив им входные данные:

Один из способов добиться чтения пароля из stdin - создать URL-адрес, содержащий пользователя & pass:

ftp://user:password@ftp.server.com/link.txt

И с помощью переключателя -l - передать ссылку на wget через стандартный ввод. Это предлагается здесь

0 голосов
/ 19 ноября 2018

Попробуйте добавить это до p.communicate:

p.stdin.write('password\n')
p.stdin.flush()
stdout, stderr = p.communicate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...