OSError:[Errno 22]无效的参数(Paramiko)

时间:2018-10-18 09:16:30

标签: python python-3.x windows sftp paramiko

我正在使用Paramiko进行sftp,以将文件从Linux环境传输到Windows。

我在Stack Overflow上尝试了不同的解决方案,但仍然遇到相同的问题。

我的脚本

localpath = os.path.join(os.sep, 'Users', 'me', 'Desktop', 'ELK', 'PM_XML')
serverpath = r"***/****/***"
def sftp():
    ip=ipAddr.get()
    while True:
        current_time = time.time()
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(ip,username="root",password="root")
        sftp = ssh.open_sftp()
        for element in sftp.listdir(serverpath):
            if element.endswith(".xml"):
                creation_time = sftp.stat(serverpath+element).st_mtime
                if (current_time+3400 - creation_time) / (3600) <= 1:
                    sftp.get(serverpath+element,os.path.join(os.sep,localpath,element))
        sftp.close()
        ssh.close()

我收到此错误:

Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
  File "C:\Users\me\AppData\Local\Programs\Python\Python37-32\lib\site-packages\paramiko\sftp_client.py", line 801, in g
et
    with open(localpath, "wb") as fl:
OSError: [Errno 22] Invalid argument: '\\Users\\me\\Desktop\\ELK\\PM_XML\\A2018-10-18T11:03:00+02:00-2018-10-18T11:04:00
+02:00_user-67-0-test-vm2.lk.fr.xml'

我认为问题是由于文件名

  

A2018-10-18T11:03:00 + 02:00-2018-10-18T11:04:00 +02:00_user-67-0-test-vm2.lk.fr.xml'

因为当我尝试使用简单的文件名进行操作时,我的脚本可以正常工作。

关于处理此文件名的任何建议,因为我想保持服务器上使用的相同名称。

由Martin Prikryl解决 一个建议用“ _”代替冒号“:”

element.replace(":","_")

1 个答案:

答案 0 :(得分:2)

在Windows上,文件名不能包含冒号(:)和其他特殊字符。

有关Naming Conventions的Microsoft文档:

  

使用当前代码页中的任何字符作为名称,包括Unicode字符和扩展字符集(128–255)中的字符,但以下各项除外:

     
      
  • ...

  •   
  • :(冒号)

  •   
  • ...

  •   

您无能为力。