使用 python 上传 SFTP 文件

Posted

技术标签:

【中文标题】使用 python 上传 SFTP 文件【英文标题】:SFTP file upload using python 【发布时间】:2019-03-23 19:12:25 【问题描述】:

我正在使用此link 中的代码使用python 将xlsx 文件上传到SFTP 服务器。

我修改了parse_args()方法如下:

def parse_args():
    parser = argparse.ArgumentParser(
        "Uploads CSV files to TrustYou's sftp server",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument(
        'ftpclients.myserver.com', type=str,
        help="The name of the sftp server, (eg: sftp.trustyou.com)")
    parser.add_argument(
        'Mike', type=str,
        help="The name of the user, (eg: hotel-california)")
    parser.add_argument(
        r'C:\Users\Mike\Desktop\uploader\testUpload.xlsx', type=str,
        help="The name of the CSV file, (eg: datafile.csv)")
    parser.add_argument(
        r'C:\Users\Mike\Desktop\uploader\securityKey.ppk', type=str,
        help="The path to the private key file, (eg: ~/.ssh/id_rsa)")
    return parser.parse_args()

但是,我收到以下错误:

Uploads CSV files to TrustYou's sftp server: error: the following arguments are required: ftpclients.myserver.com, securityKey, C:\Users\Mike\Desktop\uploader\testUpload.xlsx, C:\Users\Mike\Desktop\uploader\securityKey.ppk

在我想要完成的工作中,还有其他替代方案更好吗?这是我第一次尝试,所以不确定我是否走在正确的道路上。

【问题讨论】:

【参考方案1】:

您给参数名称一个非常错误的值。想象一下用你命名的参数调用可执行文件只是想象

upload_data.py "--C:\Users\Mike\Desktop\uploader\testUpload.xlsx=filename you need to pass"

正确的调用方式如下代码所示

parser.add_argument(
    '--datafile', type=str,
    help="The name of the CSV file, (eg: datafile.csv)")

然后在命令行上运行它,如下所示

yourscript.py --datafile="C:\Users\Mike\Desktop\uploader\testUpload.xlsx"

如果你想给出默认值,那么你可以检查Python argparse: default value or specified value 是否正确实现

【讨论】:

【参考方案2】:

我简要地查找了自述文件。 https://github.com/trustyou/example-connect-sftp/blob/master/README.md

您不需要更改 python parse_args 方法。

用法

$ python upload_data.py sftp.example.com superman /home/superman/data.csv/ /home/superman/.ssh/id_rsa

如果必须更改源代码,请替换参数。

...
if __name__ == '__main__':

    args = parse_args()
    sftp_upload(args.servername, args.username, args.datafile, args.privatekey) # change params here

【讨论】:

以上是关于使用 python 上传 SFTP 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 ppk 文件上传 Paramiko sftp [重复]

如何在Python中将所有文件从Windows文件夹上传到SFTP文件夹

Python Paramiko实现sftp文件上传下载以及远程执行命令

直接将文件上传到SFTP而不将其存储到本地系统[重复]

Python paramiko模块使用解析实现sftp

仅20行代码,实现文件自动化上传至sftp