2017-08-08 63 views
-2

我需要一些幫助。這是我決定發送文件的代碼client.py的一部分。Python使用tcp在一個目錄中發送一些文件

if file1.exists(): 
    f=open(file_name1,'rb') 
    print >> sys.stderr,'Sending file datasensor1 to %s ....'%server_address 
    l = f.read(1024) 
    while (l): 
     print >> sys.stderr,'Sending...' 
     s.sendall(l) 
     l=f.read(1024) 
    f.close() 
    print >> sys.stderr,'Done sending to server %s' %server_address 
    s.shutdown(socket.SHUT_WR) 
    print s.recv(1024) 
    s.close() 

elif file2.exists(): 
    print "File datasensor1 not found" 
    f=open(file_name2,'rb') 
    print >> sys.stderr,'Sending file datasensor2 to %s ....'%server_address 
    l = f.read(1024) 
    while (l): 
     print >> sys.stderr,'Sending...' 
     s.sendall(l) 
     l=f.read(1024) 
    f.close() 
    print >> sys.stderr,'Done sending to server %s' %server_address 
    s.shutdown(socket.SHUT_WR) 
    print s.recv(1024) 
    s.close() 
elif file3.exists(): 
    print "File datasensor2 not found" 
    f=open(file_name3,'rb') 
    print >> sys.stderr,'Sending file datasensor3 to %s ....'%server_address 
    l = f.read(1024) 
    while (l): 
     print >> sys.stderr,'Sending...' 
     s.sendall(l) 
     l=f.read(1024) 
    f.close() 
    print >> sys.stderr,'Done sending to server %s' %server_address 
    s.shutdown(socket.SHUT_WR) 
    print s.recv(1024) 
    s.close() 

else: 
    print "All Files not found" 

這是工作時,目錄中至少有一個來自三個文件的決定。但是當目錄中有three文件(file1,file2,and file3)時,它只是發送file1。如果在目錄中有三個文件,我該如何發送所有三個文件?

在此先感謝

回答

1

你不應該使用elifelif僅在if條件失敗時檢查條件。在你的情況下,if條件成功,所以只有if下的代碼被執行。

因此,你可以用一個標誌(例如allThreeFail)是這樣的:

allThreeFail = True 
if file1.exists(): 
    f=open(file_name1,'rb') 
    print >> sys.stderr,'Sending file datasensor1 to %s ....'%server_address 
    l = f.read(1024) 
    while (l): 
     print >> sys.stderr,'Sending...' 
     s.sendall(l) 
     l=f.read(1024) 
    f.close() 
    print >> sys.stderr,'Done sending to server %s' %server_address 
    #s.shutdown(socket.SHUT_WR) 
    print s.recv(1024) 
    #s.close() 
    allThreeFail = False 

if file2.exists(): 
    print "File datasensor1 not found" 
    f=open(file_name2,'rb') 
    print >> sys.stderr,'Sending file datasensor2 to %s ....'%server_address 
    l = f.read(1024) 
    while (l): 
     print >> sys.stderr,'Sending...' 
     s.sendall(l) 
     l=f.read(1024) 
    f.close() 
    print >> sys.stderr,'Done sending to server %s' %server_address 
    #s.shutdown(socket.SHUT_WR) 
    print s.recv(1024) 
    #s.close() 
    allThreeFail = False 

if file3.exists(): 
    print "File datasensor2 not found" 
    f=open(file_name3,'rb') 
    print >> sys.stderr,'Sending file datasensor3 to %s ....'%server_address 
    l = f.read(1024) 
    while (l): 
     print >> sys.stderr,'Sending...' 
     s.sendall(l) 
     l=f.read(1024) 
    f.close() 
    print >> sys.stderr,'Done sending to server %s' %server_address 
    s.shutdown(socket.SHUT_WR) 
    print s.recv(1024) 
    s.close() 
    allThreeFail = False 

if allThreeFail: 
    print "All Files not found" 
+0

我得到的錯誤文件 「clie2.py」,第44行,在 s.sendall(L) 文件「/ usr/lib/python2.7/socket.py「,第228行,在meth 返回getattr(self._sock,name)(* args) 文件」/usr/lib/python2.7/socket.py「,行174,在_dummy 引發錯誤(EBADF,'Bad file descriptor') socket.error:[錯誤9]錯誤的文件描述符 –

+0

這是什麼? 我認爲除了第三個if區塊,除了's.close()'和's.shutdown()'都可能有幫助嗎?嘗試一次。如果成功,我會在這裏更新 – nikpod

+0

s指插座。 s = socket.socket() –

相關問題