0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用python写一个程序让它在后台运行

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2022-08-27 08:59 次阅读

昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到。但是,如果我想,比如,当一个usb插入时,在后台自动把usb里的重要文件神不知鬼不觉地拷贝到本地或者上传到某个服务器,就需要特殊的软件辅助。

于是我心想,能不能用python写一个程序,让它在后台运行。每当有u盘插入的时候,就自动拷贝其中重要文件。

如何判断U盘的插入与否?

5df30052-254d-11ed-ba43-dac502259ad0.jpg

首先我们打开电脑终端,进入/Volumes目录,这时候插入U盘,可以发现它被挂载在了这个目录之下,也就是说,我们只要在固定时间扫描这个目录,当这个目录有新文件夹出现的时候,很可能有U盘被插入了。

我的设计是这样的,用time.sleep(3)函数,让程序保持运行状态,并且每隔三秒查看一下/Volumes/目录,如果多出来文件夹,就将其拷贝到另外的文件夹。

5e038418-254d-11ed-ba43-dac502259ad0.jpg

就像标题所示,我们真的只用了10行(其实是11行,凑个整:)完成了这个“病毒”。我们可以发现usb中的目录,在插入半分钟后全部躺在了home目录下了。

如何选择性的复制文件?

刚刚我们写了一个很简易的脚本测试了一下这个想法的可行性,但是还是有问题。刚才之所以能把U盘中所有文件很快复制进去,是因为U盘中只有两三个文件,大小不超过15M。如果目标U盘中有很多电影,音乐,这些我们并不需要的文件,我们的程序就应该能跳过它们,仅仅选择一些重要的比如.docx比如.ppt文件,或者仅仅复制最近修改过的那些文件,或者排除所有大小大于5M的文件。我们可以用python做到吗?当然!

os.walk 递归文件夹中所有文件

http://www.runoob.com/python/os-walk.html

这里我放了一个别人的教程。大家可以大概了解一下,总之我大概理解是这么个东西。

还是举个例子吧。

我在某目录下创建了testwalk文件夹,里面有file123.txt三个文件,folder123三个文件夹,其中folder1中有文件file4.txt以及folder4

5e1d0014-254d-11ed-ba43-dac502259ad0.png

现在我们来测试一下

5e2bbeec-254d-11ed-ba43-dac502259ad0.png

root存放的是当前位置,它会把./testwalk/下所有的文件夹作为根目录,往下搜索

5e48bb32-254d-11ed-ba43-dac502259ad0.png

单独查看 dirs

5e5ce3b4-254d-11ed-ba43-dac502259ad0.png

单独查看 files

5e7d5fc2-254d-11ed-ba43-dac502259ad0.png

好了,我们现在需要递归usb文件夹,找到所有的file,查看大小,如果小于,比如3M,就拷贝进home,大于就舍去。

shutil模块

5e8babcc-254d-11ed-ba43-dac502259ad0.jpg

现在我们拿刚才的文件夹举例子,如果想把file1.txt拷贝到folder2:

5e9f26de-254d-11ed-ba43-dac502259ad0.png

还有许多使用工具在shutil里面这里就不详述了。

os.path.getsize()判断大小

os.path.getsize(文件名)返回的是一个单位为byte的数值,如果用来查看文件大小,我们则需要手动写一个函数,将其换算成容易阅读的形式。

5eaefa78-254d-11ed-ba43-dac502259ad0.png

这里我们只要选择文件大小小于3M的即可,3M = 3 * 1024kB = 3 * 1024*1024byte

5ebb1236-254d-11ed-ba43-dac502259ad0.png

结合shutil.copy2就可以把选定大小的文件复制进我们的目标文件夹了

如何指定文件类型

这里就需要正则表达式来帮助我们了。

正则表达式内容很多,《python核心编程》中用了整整一章来讲,所以我们也不深入了。下面是官方文档,感兴趣的可以看一下。

https://docs.python.org/2/library/re.html

如下,我们让指定文件后缀以及指定文件大小可以复制进我们的目标文件:

别忘了导入 re

5ece4086-254d-11ed-ba43-dac502259ad0.png

用更加复杂的正则表达式可以更好地指定文件类型

根据修改时间筛选文件

5ee87a5a-254d-11ed-ba43-dac502259ad0.png

这时候我在目录下创建了一个文件叫做newfile

5ef18c80-254d-11ed-ba43-dac502259ad0.jpg

总之,对每一个文件进行修改时间的筛选可以只复制那些近期,或者特定时期修改或者添加过的文件,这个功能在特定情况下很有用。

总结

其实,标题这么起只是为了吸引大家注意,这就是一个小程序,也谈不上病毒。我更想通过这个例子,展示python对于文件处理的强大能力,引发大家的学习热情。以上实现都是基于macos,linux应该一样,windows稍加修改也可以成功。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    59

    文章

    7599

    浏览量

    260497
  • 程序
    +关注

    关注

    114

    文章

    3670

    浏览量

    79858
  • python
    +关注

    关注

    53

    文章

    4701

    浏览量

    83701
  • root
    +关注

    关注

    1

    文章

    84

    浏览量

    21280

原文标题:知攻才知防,用 10 行 Python 代码写 1 个类似 USB 病毒的程序

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【代码】Android后台程序应用技巧分享

    了,程序就有有界面和无界面之分。Android后台程序就是这类无界面的程序它在后台执行,没有影响你的界面。比如短信监听程序,执行
    发表于 08-08 18:26

    Linux后台程序重定向的问题

    /pts/0 &如上,程序启动后后台运行,输出信息直接到目标shell。现在想问问,程序已经在后台启动了,能不能不重新启动
    发表于 08-22 13:54

    树莓派 python SimpleCV crontab 拍照

    1.用python定时拍照的程序使用了SimpleCV库,安装方法:1)sudo apt-get install
    发表于 10-07 22:47

    求大神帮忙python程序

    python程序,实现树莓派的实时监控功能,要求在网页上可以看到树莓派官方摄像头输出的画面,要能在外网看,微信:kingadamy,
    发表于 10-14 23:25

    后台运行vi

    运行时隐藏在后台运行
    发表于 06-09 14:32

    怎么labview主程序运行时,子程序也在运行,我点击弹出按钮的时候,只是显示子程序,子程序一直都在后台运行

    怎么labview主程序运行时,子程序也在运行,我点击弹出按钮的时候,只是显示子程序,子
    发表于 08-16 08:27

    可以使用ISR在后台进行浮点数学运算吗?

    作为普遍的问题,是否有简单的方法启动子程序,然后
    发表于 01-14 09:09

    1.3 两种运行 Python 程序方法

    ;Hello, World"),就时候就会在屏幕上打印出 Hello, World 这几个字符。print 是 Python函数,通过它可以把你内容输出到终端屏幕上。这是我们
    发表于 02-16 18:31

    HarmonyOS判断服务是否在后台运行的方法

    是否在后台运行,代码如下package com.newdemo.myapplication.slice;import com.newdemo.myapplication.MyApplication
    发表于 06-17 09:46

    Linux 后台运行程序

    的。一个任务可以对应于一个或者多个进程号。&如果需要在后台运行一个进程,可以在运行的命令后边加上 &。这样做只能让进程让出当前的终端以便做其他的事,但如果后台
    发表于 04-02 14:41 708次阅读

    python写完程序之后怎么运行

    Python是一门简洁、易学的编程语言,被广泛应用于数据分析、人工智能等领域。在学习Python编程的过程中,了解程序运行机制是至关重要的。本文将详尽解析
    的头像 发表于 11-22 11:10 744次阅读

    python怎么运行程序

    Python是一种广泛使用的编程语言,它的简易和可读性使得它成为初学者和专业开发人员的首选。在运行Python程序之前,您需要安装Python
    的头像 发表于 11-24 09:25 2144次阅读

    如何运行Python程序

    运行Python程序非常简单。Python是一种解释型语言,这意味着可以直接通过解释器来执行代码。下面我将详细介绍如何运行
    的头像 发表于 11-24 09:31 830次阅读

    运行Python程序的几种常见方法

    Python是一种高级编程语言,具有简单易学,易于阅读和调试的特点。当你完成了一个Python程序之后,你需要运行它以检查程序是否按照预期工
    的头像 发表于 11-28 15:32 611次阅读

    如何让python运行完后不退出

    Python是一门非常灵活和强大的编程语言,广泛应用于各种领域。许多Python程序都需要保持在后台运行,而不是在执行完毕后立即退出。本文将
    的头像 发表于 11-29 15:12 3668次阅读