我想用Python在远程服务器上上传一个文件,我想事先检查远程路径是否真的存在,如果不存在,就创建它。
if(remote_path not exist):
create_path(remote_path)
upload_file(local_file, remote_path)
我想在Paramiko中执行一个命令来创建路径(例如mkdir -p remote_path
)。
# I didn't test this code
import paramiko, sys
ssh = paramiko.SSHClient()
ssh.connect(myhost, 22, myusername, mypassword)
ssh.exec_command('mkdir -p ' + remote_path)
ssh.close
transport = paramiko.Transport((myhost, 22))
transport.connect(username = myusername, password = mypassword)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(local_path, remote_path)
sftp.close()
transport.close()
但是这个解决方案对我来说听起来不太好,因为我关闭了连接,然后又重新打开它,有没有更好的方法呢?
7条答案
按热度按时间7kqas0il1#
SFTP支持常见的FTP命令(chdir、mkdir等),因此请使用以下命令:
要完全模拟
mkdir -p
,可以递归地使用remote_path:当然,如果remote_path还包含一个远程文件名,则需要将其拆分出来,将目录传递给mkdir_p,并使用文件名代替sftp.put中的.“”。
eoxn13cs2#
一些更简单,可读性更强的东西
vyu0f0g13#
今天必须这么做。我是这么做的。
7uzetpgm4#
你可以使用pysftp软件包:
您可以查看此链接以获取更多详细信息:https://pysftp.readthedocs.io/en/release_0.2.9/cookbook.html#pysftp-connection-mkdir
6xfqseft5#
我的版本:
由于EAFP principle,我们尝试了
mkdir
,但没有先尝试listdir
/stat
(发出一个网络请求比发出多个网络请求性能更高)。e1xvtsh36#
Paramiko包含一个mkdir函数:
http://paramiko-docs.readthedocs.org/en/latest/api/sftp.html#paramiko.sftp_si.SFTPServerInterface.mkdir
cnjp1d6j7#
假设sftp操作的开销很大,我会选择: