Python 脚本交互式FTP登录

Python 脚本交互式FTP登录,python,bash,ftp,Python,Bash,Ftp,我正试图编写一个脚本,登录到一个ftp站点上的30多个帐户中的一个,我使用该站点进行工作 我希望看到的行为: $ ftp ftp.someplace.com connected blah blah 220 blah blah ready... Name (something): username Password: <enter password> couple lines saying successful login ftp> <manually enter comm

我正试图编写一个脚本,登录到一个ftp站点上的30多个帐户中的一个,我使用该站点进行工作

我希望看到的行为:

$ ftp ftp.someplace.com
connected blah blah
220 blah blah ready...
Name (something): username
Password: <enter password>
couple lines saying successful login
ftp> <manually enter commands such as ls, cd, get, put, etc>
这将执行并退出,返回代码为0

最后,我尝试了从CLI使用ftp,方法是从脚本调用它:

ftp ftp.someplace.com <<END_SCRIPT
> quote USER username
> quote PASS password
> END_SCRIPT
安装是否可行?它有一个标志,
-e
,可以满足您的需要:

-e cmd     execute the command just after selecting the server
在执行命令后,它保持交互。您可以使用以下方法,即每个帐户有一个具有以下模式的文件(将此文件命名,例如,
user1.lftp

open ftp://user1:password@ftp.someplace.com
当您想以user1身份连接时:

lftp -e 'source user1.lftp'
这将使您跳转到一个提示,您可以在该提示中执行
ftp
命令。您可以通过在
.bashrc
中定义如下函数使其更加方便:

lftp-open() {
    lftp -e "source $1.lftp"
}
然后就简单到:

$ lftp-open user1

显然,这种方法的缺点,或者可能是任何自动化
ftp
登录的方法的缺点,是要求以明文形式存储密码,因此您需要确保您在
*.lftp
文件上设置了正确的读权限。

哦,是的,lftp太棒了,谢谢!我喜欢它还允许制表符完成,这是我需要的这是一个额外的好处。谢谢!“但我在ftplib中发现的任何东西都不会放弃控制权,并使ftp会话具有交互性”-我相信您没有意识到您在
ftp
程序中键入的命令不是ftp协议命令。这些命令是特定ftp客户端的命令。您不希望键入真正的低级原始ftp协议命令。它无论如何都不会工作。因此,如果您希望Python库执行此操作,则该库必须实现其功能自己的命令(它将映射到本地级别的FTP协议命令)-可能与普通Linux
FTP
程序的命令匹配,也可能不匹配。
lftp-open() {
    lftp -e "source $1.lftp"
}
$ lftp-open user1