IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> WRF后处理:使用python paramiko库将服务器中wrfout文件批量下载至本地(sftp.get)/python通过sftp远程批量传输文件/sftp OSError: [Errno 22 -> 正文阅读

[系统运维]WRF后处理:使用python paramiko库将服务器中wrfout文件批量下载至本地(sftp.get)/python通过sftp远程批量传输文件/sftp OSError: [Errno 22

我们在服务器上跑完WRF时,不免会有许多的wrfout文件,这时候就需要进行后处理。
当然我们可以直接在服务器上进行后处理,但有时由于一些原因,比如笔者的服务器上无法连接conda channel(ˉ▽ˉ;)…,便将其下载至本地再进行后处理。
通过xftp软件一个个下载未免有些困难,正巧python也有支持ssh与sftp的库,我们就用python批量下载吧。

SSH连接

paramiko库提供了多种SSH连接方式,具体可以参考这篇博客:python paramiko和ssh
我这里选用了比较普通的方式:

import paramiko
import os,stat
# 实例化一个transport对象
trans = paramiko.Transport(('123.18.1.123', 22))
# 建立连接
trans.connect(username='yourusrname', password='')
# 将sshclient的对象的transport指定为以上的trans
ssh = paramiko.SSHClient()
ssh._transport = trans
stdin, stdout, stderr = ssh.exec_command('df -hl')
print(stdout.read().decode())

成功的话会打印出信息,比如:
在这里插入图片描述

Sftp文件传输

python的sftp文件传输非常简单,如果是单个文件,只要加上:

sftp=paramiko.SFTPClient.from_transport(scp)
#Copy a remote file (remotepath) from the SFTP server to the local host
sftp.get('remot path','local path')

即可,即创建一个ssh连接后,使用命令sftp.get命令下载即可,同样。上传只需要sftp.put即可。
注意:此处的local path 与remote path都是完整的路径+文件名,即path+fillname的形式,不可以只输入路径。且支持单文件下载

sftp批量传输

想要批量传输的话,思路也很简单,遍历文件夹下的文件,随后传输。
比如说,再linux下建一个文件夹mkdir,将wrfout文件全部移至该文件夹下,随后遍历文件夹,下载即可。

remote_dir="/public/home/zhangzilu/Build_WRF/WRF-4.3.3/run/wrfout/"
local_dir="F:/wrfout/mp_201805/"
files=sftp.listdir("/public/home/zhangzilu/Build_WRF/WRF-4.3.3/run/wrfout/")
for f in files:
        sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,(f1+'.nc')))
    # 关闭连接
    trans.close()

看起来非常简单,但其中也会有坑。

报错信息

OSError: [Errno 22] Invalid argument
上网查询这个错误,得到的回答都是文件路径错误,‘/‘与’'混用,但是我并不是这个错误,这时候重点来了
我们都知道,wrfout的文件命名规则为wrfout_d0*YYYY-MM_DD_hh:mm:ss
然而**,在window下’:‘为敏感字符,不能出现在文件名里!**
这时候解决办法也很简单:用replace把’:"换成’
"就好了。
Windows的敏感字符还有 "?*/\|.:><" 它们都不能出现在文件名里。

for f in files:
        print('')
        print ('Beginning to download file',f)
        print ('Downloading file:',(f+'.nc'))
        f1=f.replace(':', '_')
        sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,(f1+'.nc')))
        print ('Download file success',f)
        print ('#################################')
    # 关闭连接
    trans.close()

下载成功:
在这里插入图片描述
完整代码:

import paramiko
import os,stat
# 实例化一个transport对象
trans = paramiko.Transport(('123.18.1.123', 22))
# 建立连接
trans.connect(username='yourusrname', password=' ')
# 将sshclient的对象的transport指定为以上的trans
ssh = paramiko.SSHClient()
ssh._transport = trans
stdin, stdout, stderr = ssh.exec_command('df -hl')
print(stdout.read().decode())
remote_dir="/public/home/zhangzilu/Build_WRF/WRF-4.3.3/run/wrfout/"
local_dir="F:/wrfout/mp_201805/"
try:
    for f in files:
        print('')
        print ('Beginning to download file',f)
        print ('Downloading file:',(f+'.nc'))
        f1=f.replace(':', '_')
        sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,(f1+'.nc')))
        print ('Download file success',f)
        print ('#################################')
    # 关闭连接
    trans.close()
except Exception:
    print ("connect error!")
    

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:24:17  更:2022-09-30 01:27:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:59:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计