Используйте подпроцесс для отправки пароля

Я пытаюсь использовать модуль подпроцесса Python, чтобы войти в систему безопасного FTP-сайта и затем захватить файл. Однако я продолжаю становиться одержимым просто попыткой отправить пароль, когда это требуют. У меня до сих пор есть следующий код:

from subprocess import Popen, PIPE

proc = Popen(['sftp','user@server', 'stop'], stdin=PIPE)
proc.communicate('password')

Это все еще останавливается при подсказке пароля. Если я ввожу пароль вручную, он тогда переходит к FTP-сайту и затем вводит пароль на командной строке. Я видел, что люди предлагают использовать pexpect, но длинная история, короткая, мне нужно стандартное решение библиотеки. Есть ли так или иначе с подпроцессом и/или каким-либо другим stdlib? Что я забываю выше?

18
задан The Jug 5 March 2010 в 15:22
поделиться

3 ответа

Возможно, вам следует использовать вместо expect -подобную библиотеку?

Например, Pexpect ( пример ). Есть и другие похожие библиотеки Python.

8
ответ дан 30 November 2019 в 08:58
поделиться

Попробуйте

proc.stdin.write('yourPassword\n')
proc.stdin.flush()

Это должно сработать.

То, что вы описываете, звучит как stdin = None , где дочерний процесс наследует стандартный ввод родительского (вашей программы Python).

7
ответ дан 30 November 2019 в 08:58
поделиться

Я бы порекомендовал отказаться от подхода подпроцессов и использовать пакет paramiko для доступа к sftp.

1
ответ дан 30 November 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: