我正在运行以下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’:
按Enter键会使wget退出,错误代码为'1'
按键,然后按Enter键可使wget开始按预期方式下载。
ftp服务器是本地服务器,并且启用了匿名访问。 Python版本是2.7.8
答案 0 :(得分:0)
尝试在p.communicate
之前添加:
p.stdin.write('password\n')
p.stdin.flush()
stdout, stderr = p.communicate()
答案 1 :(得分:0)
似乎wget从tty而不是stdin读取密码。这些不一样!
sudo命令允许您switch to stdin
某些程序直接从/ dev / tty中读取,而不是从stdin中读取。例如“ passwd”。因此很难编写脚本。 Expect是解决问题的一种方法-它可以通过向他们提供输入来欺骗程序:
一种从stdin读取密码的方法是构造一个包含用户名&pass的URL:
ftp://user:password@ftp.server.com/link.txt
然后使用-l -
开关通过stdin将链接传递到wget中。建议here