使用子进程发送密码
我正在尝试使用Python的subprocess模块登录一个安全的FTP网站,然后下载一个文件。不过,我总是卡在输入密码这一步。当系统请求输入密码时,我的代码就停住了。到目前为止,我写了以下代码:
from subprocess import Popen, PIPE
proc = Popen(['sftp','user@server', 'stop'], stdin=PIPE)
proc.communicate('password')
这段代码在输入密码的时候还是停住了。如果我手动输入密码,它就能继续执行,登录到FTP网站,然后在命令行中输入密码。我看到有人建议使用pexpect模块,但简单来说,我需要一个标准库的解决方案。请问用subprocess或者其他标准库有没有办法解决这个问题?我上面的代码有什么遗漏吗?
14 个回答
7
from subprocess import Popen, PIPE
proc = Popen(['sftp','user@server', 'stop'], stdin=PIPE)
proc.communicate(input='password')
试试在 communicate 里输入 'password',这个对我有效。
12
试试这个
proc.stdin.write('yourPassword\n')
proc.stdin.flush()
这样应该可以。
你说的情况听起来像是 stdin=None
,这意味着子进程会继承父进程(也就是你的Python程序)的输入。