如何在Python中在两台连接的计算机之间传输文件?

8 投票
4 回答
29096 浏览
提问于 2025-04-17 09:30

我不知道这个问题之前有没有人回答过(我在网上找过,但没找到),但是我想知道怎么能把一个文件(如果可以的话是.exe文件)通过网络发送到另一台连接在同一网络上的电脑上。我试过用套接字(sockets),但我只能发送字符串。我也尝试学习ftplib,但我完全不理解这个东西,甚至不知道FTP是不是我需要的,所以我现在完全卡住了。任何建议都很受欢迎(如果有人能解释一下FTP,那就更好了,它和套接字一样吗?我看到的所有例子都没有一个服务器程序让客户端可以连接。)

4 个回答

3

可以看看paramiko这个库。它可以用来做scp和sftp的操作。

http://www.lag.net/paramiko/

11

A. Python3

我们可以用 http.server 来实现这个功能。根据这个回答,在 python3 中,SimpleHTTPServer 已经被移到了 http.server

python -m http.server

Python2:

我有时候会用 SimpleHTTPServer 来做这个:

python -m SimpleHTTPServer

...这会在8000端口上提供当前目录下的文件。你可以在另一台电脑上打开网页浏览器,下载你想要的任何东西。

要知道你电脑的IP地址,可以在Ubuntu中使用 ifconfig,例如:

$ ifconfig
enp0s31f6 Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:10.0.0.3  Bcast:10.0.0.255  Mask:255.255.255.0

在Windows中则是 ipconfig

然后,在另一台电脑上,你可以在浏览器中输入:http://10.0.0.3:8000

B. 如果你启用了SSH,你可以使用paramiko来连接并通过SFTP传输你想要的任何东西。

7

这里有一些简单的示例代码,展示了发送方的操作:

if os.path.exists(df):
  with open(df, 'rb') as f:
    packet = f.read(blocksize)

    while packet != '':
      conn.send(packet)

      packet = f.read(blocksize)

其中:

df = 'path/to/data/file'
blocksize = 8192 # or some other size packet you want to transmit.  
                 # Powers of 2 are good.
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

撰写回答