还是FTP的问题,上传了一个就会自动中断(已解决)

还是FTP的问题,上传了一个就会自动中断(已解决)



[Copy to clipboard] [ - ]
CODE:
bufsize = 1024
def ftpstor():
    ftp=ftplib.FTP()
    try:
        ftp.connect(ftp_addr,ftp_port)
        ftp.login(ftp_user,ftp_pwd)
        print ftp.getwelcome()
        ftp.set_pasv(1)
        ftp.cwd(ftp_path)
        for filepath in ftpqueue:
            f = open(filepath,'rb')
            print getfilename(filepath)," uploading..."
            ftp.storbinary("STOR "+getfilename(filepath),f,bufsize) #上传文件
            f.close() #关闭文件
            print getfilename(filepath)," upload completed."
        ftp.quit()
    except:
        info=sys.exc_info()
        path=os.path.join(workdir,errlogfile)
        traceback.print_exc(file=open(path,"a"))

这段代码我跟踪了很久,在ftpqueue中有多个队列,但是每次只会上传第一个,程序在运行到ftp.storbinary这一句后就不执行了,f.close()根本没运行到,直接就跳到except里去了。
怎么查下去呢?哎。

按步运行如下

[Copy to clipboard] [ - ]
CODE:
>>> ftp.storbinary("STOR mysql.py",f,1024)
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    ftp.storbinary("STOR mysql.py",f,1024)
  File "C:\Python25\lib\ftplib.py", line 432, in storbinary
    return self.voidresp()
  File "C:\Python25\lib\ftplib.py", line 223, in voidresp
    raise error_reply, resp
error_reply: 150 开始上传数据!

很明显,接受了上传指令,但是有错。问题是我查不出错在哪,也不知道怎么解决。
ftp.storbinary("STOR "+getfilename(filepath),f,bufsize) 这句我老是觉得有问题
库参考上是这样说的
Store a file in binary transfer mode. command should be an appropriate STOR command: "STOR filename". file is an open file object which is read until EOF using its read() method in blocks of size blocksize to provide the data to be stored. The blocksize argument defaults to 8192. callback is an optional single parameter callable that is called on each block of data after it is sent.
我觉得应该写成ftp.storbinary("STOR  filename ",f,bufsize)  不过没测试。


[Copy to clipboard] [ - ]
CODE:
>>> ftp.storbinary("STOR mysql.py ",f,bufsize)
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    ftp.storbinary("STOR mysql.py ",f,bufsize)
  File "C:\Python25\lib\ftplib.py", line 432, in storbinary
    return self.voidresp()
  File "C:\Python25\lib\ftplib.py", line 223, in voidresp
    raise error_reply, resp
error_reply: 150 开始上传数据!

楼上的我也试过啊,只是filename比我的多一个空格,我加上也试了下,一样的问题。

我看到FTP语法里STOR好象很简单,只要STOR filename就行了,可是在这里我试了会提示我参数少于3个,想不通啊想不通。
用下面的测试了一下没有任何问题,python2.5
import  ftplib
fq=["a.txt","b.txt"]
bufsize = 1024
ftp=ftplib.FTP("10.60.33.177")
ftp.set_pasv(True)
ftp.login()
for file in fq:
    f=open(file,"rb")
    ftp.storbinary("STOR %s"  % f.name ,f,bufsize)
    f.close()
ftp.close()

其实还是不行,刚才说行说得早了。

C:\works>python a.py
Traceback (most recent call last):
  File "a.py", line 9, in <module>
    ftp.storbinary("STOR %s"  % f.name ,f,bufsize)
  File "C:\Python25\lib\ftplib.py", line 432, in storbinary
    return self.voidresp()
  File "C:\Python25\lib\ftplib.py", line 223, in voidresp
    raise error_reply, resp
ftplib.error_reply: 150 开始上传数据!

然后FTP上的确能收到队列中的第一个文件,我本来也就是能收到第一个文件的。
但是第二个文件死活上传不了。
楼上再帮我一下,你本地能测试通过么?

我直接吐血身亡算了。。。。。
我查了至少二天,最后换用Serv-U做为FTP服务器就什么问题都没了,我原先用一个比较弱的chkftp软件。

恨恨啊。程序没问题,谢谢解答的兄弟。