使用Python开启局域网传送数据(2):在 Windows 系统使用 droopy 实现仅上传功能

💡温馨提示:本文测试环境:windows11 64位、Python3.9。

摘要:本文将介绍在 Windows 系统中如何使用 Python 的第三方模块 droopy 实现在局域网中传送数据,仅限于别人上传文件给自己的功能,不具备下载功能。

1、基本介绍

droopy模块是Python一个小型的 Web 服务器,可以用来搭建简单医用的文件传输服务,特备是在局域网中,可以直接开启相关的服务。
droopy是 Python 的第三方模块,因此需要另外安排相关的库。使用以下命令安装。

pip install droopy

我查了好些教程,都是教 Mac 和 Linux 系统的操作,包括官方的 GitHub 也是只说怎么进行 Linux 和 Mac 的使用,而 Windows 指向了另外一个链接,一来要翻墙,好不容易探了个头出去,发现链接已失效……
事实上,通过该方式没走通,可能有方法,不过目前没有“解惑”。

2、开启服务

虽然直接安装的方式没有走通,也没有找到 Windows 的教程,但是仔细想想,其实“天无绝人之路”,官方的GitHub上还是有提供一个完整的droopy.py的代码!实际上,有它就够了!
image.png
可以打开之后复制源码,本地新建一个 Python 文件,粘贴保存下来(注意文件名为droopy.py),也可以下载所有文件,然后再去留。

获取到droopy.py之后,新建一个要用于分享的文件夹,假设是D:\FileShare,将droopy.py复制一份放到该文件夹下,然后可以打开 命令提示符或终端,依次输入以下命令,每次输完回车:

xxx>E:
E:\>cd E:\FileShare
E:\Fileshare>python droopy.py

示例如下:
image.png

好了,已经成功开启相关服务。

下面介绍一些配置:
默认端口号为 8000,可以根据自己的需要进行修改,使用以下命令([port]为端口号)。

python droopy.py [port]

默认的共享文件所在的路径就是当前执行命令的路径,如上图,我在E:\Fileshare输入对应的命令,则局域网内的其他电脑就只能访问我的 E:\Fileshare文件夹下的内容。

如果需要修改共享文件的路径,可以跟我上面展示的类似,通过切换路径再执行开启服务的命令,如果不想切换,可以使用使用以下命令([dir]为共享文件路径):

python droopy.py -d [dir]

另外,还可以对共享的界面加上一些有趣的提示和美化,命令如下:

python droopy.py -m "<增加有趣的提示语>" -p '<增加图片地址>'

-m后面加上对应的提示语,而-p可以加上一个图片的链接,下面我做一个示例:

E:\Fileshare>python droopy.py -m "Xindata's FileShare" -p hello.png

效果如下:
image.png

可能 bug:

1、python: can't open file 'E:\Fileshare\droopy.py': [Errno 2] No such file or directory
droopy.py文件没有在E:\Fileshare文件夹下,至少有三种方法可以解决:

  • 其一,将文件复制粘贴到E:\Fileshare文件夹下,可能每一个用于分享的文件夹都需要该操作;
  • 其二,传入droopy.py文件的绝对路径,让命令找得到它;
  • 其三,将droopy.py文件放到 Python 已添加环境变量的目录下,或单独给droopy.py文件所在的路径添加到环境变量,添加方式参考:https://blog.csdn.net/qq_45476428/article/details/113849839

2、TypeError('__init__() takes from 1 to 11 positional arguments but 12 were given')
这个是因为droopy.py文件中的__init__()方法只有11个参数,而其父类有12个参数,在参数传递过程中出现了一些问题,给droopy.py文件中的__init__()方法再多加一个参数即可,该参数不会影响droopy.py文件代码逻辑,只要不和其他重名即可。如果不知道怎么改,可以参考使用我修改后的文件:Python 网络服务 droopy 模块源文件(免积分下载)。

3、droopy.py: error: argument port: invalid int value: "FileShare'"
这个是因为python droopy.py -m "Xindata's FileShare"中不是使用双引号,而是单引号,修改为双引号即可。

4、[Errno 2] No such file or directory: 'E:\\hello.png'
这个是因为python droopy.py -p hello.png中的图片使用了绝对路径,似乎绝对路径不行,使用相对路径则没问题,即使文件不是在E:\Fileshare文件夹下。

3、连接服务

启动服务成功后,就可以在浏览器中访问指定地址、指定路径中的文件了。
默认情况下,在浏览器输入以下命令回车即可查看

127.0.0.1:8000  # 或 http://127.0.0.1:8000

本地的地址,还可以使用 localhost来替代,命令如下:

localhost:8000  # 或 http://localhost:8000

还有另外一种方式,就是在命令提示符或终端输入以下命令,回车,获取你的【IPv4 地址】替换上面的 127.0.0.1 也可访问。

ipconfig

image.png

4、上传文件

上传文件特别简单,点击选择文件,如果需要同时上传多个文件,可以按住ctrl 键,再分别点击选文件,然后打开,发送即可。
image.png

5、小结

本文介绍了在 Windows 系统中,使用 droopy 模块实现了在局域网中传送数据。

注意,droopy模块仅支持文件的上传,不能下载。

<下章节介绍在局域网中实现上传下载的功能>









- End -

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本关任务:根据给出的基类Animal和main()函数。 1、根据给出的main()函数和运行结果的提示,设计出相关的各个类,注意观察运行结果,提取出每个类中需要的数据成员,并匹配上需要的成员函数。 2、显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。 3、每一个Animal的派生类都有一个“名字”数据成员,这一共有的成员完全可以由基类提供改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用。 下面是给出的基类Animal和main()函数: class Animal { public: virtual void cry() { cout<<"不知哪种动物,让我如何学叫?"<<endl; } }; int main( ) { Animal *p; Animal a = Animal(); a.cry(); Mouse m1("Jerry",'m'); p=&m1; p->cry(); Mouse m2("Jemmy",'f'); p=&m2; p->cry(); Cat c1("Tom"); p=&c1; p->cry(); Dog d1("Droopy"); p=&d1; p->cry(); Giraffe g1("Gill",'m'); p=&g1; p->cry(); return 0; } 下面是程序的运行结果: 不知哪种动物,让我如何学叫? 我叫Jerry,是一只公老鼠,我的叫声是:吱吱吱! 我叫Jemmy,是一只母老鼠,我的叫声是:吱吱吱! 我叫Tom,是一只猫,我的叫声是:喵喵喵! 我叫Droopy,是一条狗,我的叫声是:汪汪汪! 我叫Gill,是公长颈鹿,我的脖子太长,发不出声音来!
05-25
根据运行结果可以设计出以下类: ```cpp class Animal { public: virtual void cry() = 0; // 抽象函数 string name; // 动物名字,作为Animal的数据成员 }; class Mouse : public Animal { public: char sex; // 性别 Mouse(string n, char s) { name = n; sex = s; } void cry() { cout<<"我叫"<<name<<",是一只"; if (sex == 'm') cout<<"公老鼠,"; else cout<<"母老鼠,"; cout<<"我的叫声是:吱吱吱!"<<endl; } }; class Cat : public Animal { public: Cat(string n) { name = n; } void cry() { cout<<"我叫"<<name<<",是一只猫,我的叫声是:喵喵喵!"<<endl; } }; class Dog : public Animal { public: Dog(string n) { name = n; } void cry() { cout<<"我叫"<<name<<",是一条狗,我的叫声是:汪汪汪!"<<endl; } }; class Giraffe : public Animal { public: char sex; // 性别 Giraffe(string n, char s) { name = n; sex = s; } void cry() { cout<<"我叫"<<name<<",是公长颈鹿,我的脖子太长,发不出声音来!"<<endl; } }; ``` Animal被设计为抽象类,具有纯虚函数cry()和数据成员name。Mouse、Cat、Dog、Giraffe都继承自Animal,并实现了cry()函数。在main()函数中,Animal *p;改为Animal *p=nullptr;,并将p = new Animal();删除。 ```cpp int main() { Animal *p = nullptr; // 初始化为nullptr Mouse m1("Jerry", 'm'); p = &m1; p->cry(); Mouse m2("Jemmy", 'f'); p = &m2; p->cry(); Cat c1("Tom"); p = &c1; p->cry(); Dog d1("Droopy"); p = &d1; p->cry(); Giraffe g1("Gill", 'm'); p = &g1; p->cry(); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xin学数据

为你点亮一盏灯,愿你前进无阻。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值