Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用psuedo文件将空文件上载到ftp_Python_File_Ftp - Fatal编程技术网

Python 使用psuedo文件将空文件上载到ftp

Python 使用psuedo文件将空文件上载到ftp,python,file,ftp,Python,File,Ftp,据我所知,用ftp创建一个空文件是不可能的,你必须在本地驱动器上创建一个空文件,上传它,然后在完成后删除它。我想知道是否有可能采取以下措施: class FakeFile: def read(self): return '\x04' ftpinstance.storbinary('stor fe', FakeFile()) 我认为这可能是可行的,因为storbinary的文档说它接受一个带有“read”方法的对象并调用它,直到它返回EOF,并且\x04是ASCII E

据我所知,用ftp创建一个空文件是不可能的,你必须在本地驱动器上创建一个空文件,上传它,然后在完成后删除它。我想知道是否有可能采取以下措施:

class FakeFile:
    def read(self):
        return '\x04'

ftpinstance.storbinary('stor fe', FakeFile())

我认为这可能是可行的,因为storbinary的文档说它接受一个带有“read”方法的对象并调用它,直到它返回EOF,并且\x04是ASCII EOF字符。不过我已经尝试过了,文件在服务器上的大小是随机的千字节数。我有什么误解吗?

在现代用法中,文件结尾不是ASCII 4。这是XMODEM和电传打字机时代的过时用法。试试这个:

class FakeFile:
    def read(self, size=0):
        return ''
因为空读是EOF


使用当前代码,您应该得到一个完全由“\x04”字符组成的随机长度文件。这是因为它在读取时似乎总是有数据^_-

在现代用法中,文件结尾不是ASCII 4。这是XMODEM和电传打字机时代的过时用法。试试这个:

class FakeFile:
    def read(self, size=0):
        return ''
因为空读是EOF


使用当前代码,您应该得到一个完全由“\x04”字符组成的随机长度文件。这是因为它在读取时似乎总是有数据^_-

实际上,文档读取“读取到EOF”。我通过使read函数返回一个空字符串来解决这个问题。

实际上,文档读取“读取到EOF”。我通过使read函数返回一个空字符串来解决这个问题。

无需实现自己的类文件,只需使用Python 3中内置模块StringIO或BytesIO中的内存文件即可:

import ftplib
import cStringIO

ftp = ftplib.FTP('ftp.example.com')
ftp.login('user', 'pass')

voidfile = cStringIO.StringIO('')
ftp.storbinary('STOR emptyfile.foo', voidfile)

ftp.close()
voidfile.close()

无需实现自己的类文件,只需使用Python 3中内置模块StringIO或BytesIO中的内存文件即可:

import ftplib
import cStringIO

ftp = ftplib.FTP('ftp.example.com')
ftp.login('user', 'pass')

voidfile = cStringIO.StringIO('')
ftp.storbinary('STOR emptyfile.foo', voidfile)

ftp.close()
voidfile.close()

为什么它会完成上传?它不应该永远上传吗?我不知道。我想它也应该这样。为什么它会完成上传?它不应该永远上传吗?我不知道。我想也应该这样。