Я пытаюсь использовать модуль подпроцесса Python, чтобы войти в систему безопасного FTP-сайта и затем захватить файл. Однако я продолжаю становиться одержимым просто попыткой отправить пароль, когда это требуют. У меня до сих пор есть следующий код:
from subprocess import Popen, PIPE
proc = Popen(['sftp','user@server', 'stop'], stdin=PIPE)
proc.communicate('password')
Это все еще останавливается при подсказке пароля. Если я ввожу пароль вручную, он тогда переходит к FTP-сайту и затем вводит пароль на командной строке. Я видел, что люди предлагают использовать pexpect, но длинная история, короткая, мне нужно стандартное решение библиотеки. Есть ли так или иначе с подпроцессом и/или каким-либо другим stdlib? Что я забываю выше?
Возможно, вам следует использовать вместо expect -подобную библиотеку?
Например, Pexpect ( пример ). Есть и другие похожие библиотеки Python.
Попробуйте
proc.stdin.write('yourPassword\n')
proc.stdin.flush()
Это должно сработать.
То, что вы описываете, звучит как stdin = None
, где дочерний процесс наследует стандартный ввод родительского (вашей программы Python).
Я бы порекомендовал отказаться от подхода подпроцессов и использовать пакет paramiko для доступа к sftp.