我正在尝试使用 subprocess.Popen
运行 scp
(安全复制)命令。登录要求我发送密码:
from subprocess import Popen, PIPE
proc = Popen(['scp', "user@10.0.1.12:/foo/bar/somefile.txt", "."], stdin = PIPE)
proc.stdin.write(b'mypassword')
proc.stdin.flush()
这会立即返回一个错误:
user@10.0.1.12's password:
Permission denied, please try again.
我 确定 密码是正确的。我很容易通过在 shell 上手动调用 scp
来验证它。那么为什么这不起作用呢?
注意,有很多类似的问题,询问 subprocess.Popen
并发送自动 SSH 或 FTP 登录的密码:
如何通过 python 脚本在 linux 中设置用户密码?
这些问题的答案不起作用和/或不适用,因为我使用的是 Python 3。
原文由 Channel72 发布,翻译遵循 CC BY-SA 4.0 许可协议
您链接的第二个答案建议您使用 Pexpect(这通常是与期望输入的命令行程序进行交互的正确方法)。它有一个 fork 适用于你可以使用的 python3。