首页
关于
友链
Search
1
ESXI 一些功能调整
222 阅读
2
天翼云网关3.0/4.0超管密码
182 阅读
3
SoftEther 客户端篇
177 阅读
4
ESXi安装黑群晖
141 阅读
5
SoftEther 服务端篇
127 阅读
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
登录
Search
标签搜索
python
esxi
git
SoftEther
linux
apscheduler
在线
rclone
Ubuntu
list
列表
idm
激活码
Charles
pdf
免安装
鲁大师
图片查看器
蜂蜜浏览器
honeyview
哥特式
累计撰写
85
篇文章
累计收到
12
条评论
首页
栏目
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
页面
关于
友链
搜索到
71
篇与
的结果
2022-06-21
Linux下使用rclone挂载网盘到本地
Linux下使用rclone挂载网盘到本地Rclone是一个支持挂载多数国外网盘的工具。Rclone官网传送们目前Rclone支持挂载的网盘有:Google Drive、 Dropbox 、Google Cloud Storage 、Microsoft One Drive 、Hubic、 Backblaze B2 、Yandex Disk 、Openstack Swift / Rackspace cloud files / Memset Memstore 等。更强大的是,Rclone还支持SFTP 、FTP 、HTTP挂载。配置步骤(以Ubuntu为例)第一步:安装rclone 1. 方法一:rclone一键安装脚本 2. curl https: 4. 方法二: 5. wget https: 第二步:授权(以onedrive为例)rclone authorize "onedrive"会出现以下信息: 1. 2018/01/23 20:28:56 NOTICE: Config file "C:\\Users\\Administrator\\.config\\rclo 2. ne\\rclone.conf" not found - using defaults 3. Choose OneDrive account type? 4. * Say b for a OneDrive business account 5. * Say p for a personal OneDrive account 6. b) Business 7. p) Personal 8. b/p> p 9. If your browser doesn't open automatically go to the following link: http://127. 10. 0.0.1:53682/auth #接下来会弹出浏览器,要求你登录账号进行授权 11. Log in and authorize rclone for access 12. Waiting for code... 13. Got code 14. Paste the following into your remote machine ---> 15. {"access_token":"xxxx"} #请复制{xx}整个内容,后面需要用到 16. <---End paste 第三步:配置(链接网盘,以onedrive为例)rclone config会出现以下信息: 1. n) New remote 2. s) Set configuration password 3. q) Quit config 4. n/s/q> n 5. name> Rats #随便填,后面要用到 6. Type of storage to configure. 7. Choose a number from below, or type in your own value 8. 1 / Amazon Drive 9. \ "amazon cloud drive" 10. 2 / Amazon S3 (also Dreamhost, Ceph, Minio) 11. \ "s3" 12. 3 / Backblaze B2 13. \ "b2" 14. 4 / Box 15. \ "box" 16. 5 / Cache a remote 17. \ "cache" 18. 6 / Dropbox 19. \ "dropbox" 20. 7 / Encrypt/Decrypt a remote 21. \ "crypt" 22. 8 / FTP Connection 23. \ "ftp" 24. 9 / Google Cloud Storage (this is not Google Drive) 25. \ "google cloud storage" 26. 10 / Google Drive 27. \ "drive" 28. 11 / Hubic 29. \ "hubic" 30. 12 / Local Disk 31. \ "local" 32. 13 / Microsoft Azure Blob Storage 33. \ "azureblob" 34. 14 / Microsoft OneDrive 35. \ "onedrive" 36. 15 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH) 37. \ "swift" 38. 16 / Pcloud 39. \ "pcloud" 40. 17 / QingCloud Object Storage 41. \ "qingstor" 42. 18 / SSH/SFTP Connection 43. \ "sftp" 44. 19 / Webdav 45. \ "webdav" 46. 20 / Yandex Disk 47. \ "yandex" 48. 21 / http Connection 49. \ "http" 50. Storage> 14 #选择14,Microsoft OneDrive 51. Microsoft App Client Id - leave blank normally. 52. client_id> #留空 53. Microsoft App Client Secret - leave blank normally. 54. client_secret> #留空 55. Remote config 56. Choose OneDrive account type? 57. * Say b for a OneDrive business account 58. * Say p for a personal OneDrive account 59. b) Business 60. p) Personal 61. b/p> p #这里选择个人版,你想挂载Business就选择b 62. Use auto config? 63. * Say Y if not sure 64. * Say N if you are working on a remote or headless machine 65. y) Yes 66. n) No 67. y/n> n #选择n 68. For this to work, you will need rclone available on a machine that has a web browser available. 69. Execute the following on your machine: 70. rclone authorize "onedrive" 71. Then paste the result below: 72. result> {"access_token":""} #输入之前在客户端授权的内容 74. [Rats] 75. client_id = 76. client_secret = 77. token = {"access_token":""} 79. y) Yes this is OK 80. e) Edit this remote 81. d) Delete this remote 82. y/e/d> y # 选择y 83. Current remotes: 85. Name Type 86. ==== ==== 87. Rats onedrive 89. e) Edit existing remote 90. n) New remote 91. d) Delete remote 92. r) Rename remote 93. c) Copy remote 94. s) Set configuration password 95. q) Quit config 96. e/n/d/r/c/s/q> q #选择q退出 第四步:网盘挂载挂载为目录 1. 举例: 2. 目标:将rclone中的OneDrive挂载到本地/home/songtianlun/onedrive目录下,并清空本地目录内容(--allow-non-empty) 4. rclone mount OneDrive: /home/songtianlun/onedrive --allow-non-empty 6. 注:网盘目录和本地目录名称不可一致,否则报错 利用Screen让Rclone在后台运行screen -S onedrive之后再运行挂载命令。挂载完成后再用快捷键CTRL-a d 来暂时断开当前会话。最后用screen -r <screen_pid>重新连接上。若没有安装Screen,可以使用如下命令安装: 1. yum install screen #centos系统 2. apt-get install screen #debian/ubuntu系统 第五步:卸载磁盘 1. fusermount -qzu LocalFolder 常用命令 1. rclone config – 以控制会话的形式添加rclone的配置,配置保存在.rclone.conf文件中。 2. rclone copy – 将文件从源复制到目的地址,跳过已复制完成的。 3. rclone mount-挂载 4. rclone sync – 将源数据同步到目的地址,只更新目的地址的数据。 5. rclone move – 将源数据移动到目的地址。 6. rclone delete – 删除指定路径下的文件内容。 7. rclone purge – 清空指定路径下所有文件数据。 8. rclone mkdir – 创建一个新目录。 9. rclone rmdir – 删除空目录。 10. rclone check – 检查源和目的地址数据是否匹配。 11. rclone ls – 列出指定路径下所有的文件以及文件大小和路径。 12. rclone lsd – 列出指定路径下所有的目录/容器/桶。 13. rclone lsl – 列出指定路径下所有文件以及修改时间、文件大小和路径。 14. rclone md5sum – 为指定路径下的所有文件产生一个md5sum文件。 15. rclone sha1sum – 为指定路径下的所有文件产生一个sha1sum文件。 16. rclone size – 获取指定路径下,文件内容的总大小。 17. rclone version – 查看当前版本。 18. rclone cleanup – 清空remote。 19. rclone dedupe – 交互式查找重复文件,进行删除/重命名操作。
2022年06月21日
26 阅读
0 评论
0 点赞
2022-06-08
Linux命令
{tabs}{tabs-pane label="查询端口是否占用"}lsof -i:5706{/tabs-pane}{tabs-pane label="查看日志"}这会显示日志文件的末尾内容,默认显示最后10行。可以通过指定-n参数来显示指定行数的日志,例如:tail -n 20 logfile.txt这会显示最后20行日志。可以通过指定-f参数来跟踪文件变化,实时显示新增的日志,例如:tail -f logfile.txt这在需要实时监控日志变化时非常有用。{/tabs-pane}{/tabs}
2022年06月08日
14 阅读
0 评论
0 点赞
2022-06-07
Python错误类型
Python全部的错误类型错误类型——说明ZeroDivisionError——除(或取模)零 (所有数据类型)ValueError——传入无效的参数AssertionError——断言语句失败StopIteration——迭代器没有更多的值IndexError——序列中没有此索引(index)IndentationError——缩进错误OSError——输入/输出操作失败ImportError——导入模块/对象失败NameError——未声明/初始化对象 (没有属性)AttributeError——对象没有这个属性GeneratorExit——生成器(generator)发生异常来通知退出TypeError——对类型无效的操作KeyboardInterrupt——用户中断执行(通常是输入^C)OverflowError——数值运算超出最大限制FloatingPointError——浮点计算错误BaseException——所有异常的基类SystemExit——解释器请求退出Exception——常规错误的基类StandardError——所有的内建标准异常的基类ArithmeticError——所有数值计算错误的基类EOFError——没有内建输入,到达EOF 标记EnvironmentError——操作系统错误的基类WindowsError——系统调用失败LookupError——无效数据查询的基类KeyError——映射中没有这个键MemoryError——内存溢出错误(对于Python 解释器不是致命的)UnboundLocalError——访问未初始化的本地变量ReferenceError——弱引用(Weak reference)试图访问已经垃圾回收了的对象RuntimeError——一般的运行时错误NotImplementedError——尚未实现的方法SyntaxError Python——语法错误TabError——Tab 和空格混用SystemError——一般的解释器系统错误UnicodeError——Unicode 相关的错误UnicodeDecodeError——Unicode 解码时的错误UnicodeEncodeError——Unicode 编码时错误UnicodeTranslateError——Unicode 转换时错误以下为警告类型Warning——警告的基类DeprecationWarning——关于被弃用的特征的警告FutureWarning——关于构造将来语义会有改变的警告OverflowWarning——旧的关于自动提升为长整型(long)的警告PendingDeprecationWarning——关于特性将会被废弃的警告RuntimeWarning——可疑的运行时行为(runtime behavior)的警告SyntaxWarning——可疑的语法的警告UserWarning——用户代码生成的警告
2022年06月07日
40 阅读
0 评论
0 点赞
2022-05-26
此内容被密码保护
加密文章,请前往内页查看详情
2022年05月26日
7 阅读
0 评论
0 点赞
2022-05-26
APScheduler最基本的用法: “定时几秒后启动job”
APScheduler最基本的用法: “定时几秒后启动job”两种调度器: BackgroundScheduler和BlockingScheduler的区别,job执行时间大于定时调度时间特殊情况的问题及解决方法每个job都会以thread的方式被调度。1、基本的定时调度APScheduler是python的一个定时任务调度框架,能实现类似linux下crontab类型的任务,使用起来比较方便。它提供基于固定时间间隔、日期以及crontab配置类似的任务调度,并可以持久化任务,或将任务以daemon方式运行。下面是一个最基本的使用示例:from apscheduler.schedulers.blocking import BlockingScheduler def job(): print('job 3s') if __name__=='__main__': sched = BlockingScheduler(timezone='MST') sched.add_job(job, 'interval', id='3_second_job', seconds=3) sched.start()它能实现每隔3s就调度job()运行一次,所以程序每隔3s就输出'job 3s'。通过修改add_job()的参数seconds,就可以改变任务调度的间隔时间。2、BlockingScheduler与BackgroundScheduler区别APScheduler中有很多种不同类型的调度器,BlockingScheduler与BackgroundScheduler是其中最常用的两种调度器。那他们之间有什么区别呢? 简单来说,区别主要在于BlockingScheduler会阻塞主线程的运行,而BackgroundScheduler不会阻塞。所以,我们在不同的情况下,选择不同的调度器:BlockingScheduler: 调用start函数后会阻塞当前线程。当调度器是你应用中唯一要运行的东西时(如上例)使用。BackgroundScheduler: 调用start后主线程不会阻塞。当你不运行任何其他框架时使用,并希望调度器在你应用的后台执行。下面用两个例子来更直观的说明两者的区别。BlockingScheduler例子from apscheduler.schedulers.blocking import BlockingScheduler import time def job(): print('job 3s') if __name__=='__main__': sched = BlockingScheduler(timezone='MST') sched.add_job(job, 'interval', id='3_second_job', seconds=3) sched.start() while(True): # 不会被执行到 print('main 1s') time.sleep(1) 运行这个程序,我们得到如下的输出:job 3s job 3s job 3s job 3s 可见,BlockingScheduler调用start函数后会阻塞当前线程, 导致主程序中while循环不会被执行到。 BackgroundScheduler例子from apscheduler.schedulers.background import BackgroundScheduler import time def job(): print('job 3s') if __name__=='__main__': sched = BackgroundScheduler(timezone='MST') sched.add_job(job, 'interval', id='3_second_job', seconds=3) sched.start() while(True): print('main 1s') time.sleep(1) 可见,BackgroundScheduler调用start函数后并不会阻塞当前线程,所以可以继续执行主程序中while循环的逻辑。main 1s main 1s main 1s job 3s main 1s main 1s main 1s job 3s 通过这个输出,我们也可以发现,调用start函数后,job()并不会立即开始执行。而是等待3s后,才会被调度执行。如何让job在start()后就开始运行如何才能让调度器调用start函数后,job()就立即开始执行呢?其实APScheduler并没有提供很好的方法来解决这个问题,但有一种最简单的方式,就是在调度器start之前,就运行一次job(),如下from apscheduler.schedulers.background import BackgroundScheduler import time def job(): print('job 3s') if __name__=='__main__': job() # 执行一次就好了哟 sched = BackgroundScheduler(timezone='MST') sched.add_job(job, 'interval', id='3_second_job', seconds=3) sched.start() while(True): print('main 1s') time.sleep(1) 这样就能得到如下的输出job 3s main 1s main 1s main 1s job 3s main 1s main 1s main 1s这样虽然没有绝对做到“让job在start()后就开始运行”,但也能做到“不等待调度,而是刚开始就运行job”。如果job执行时间过长会怎么样如果执行job()的时间需要5s,但调度器配置为每隔3s就调用一下job(),会发生什么情况呢?我们写了如下例子:from apscheduler.schedulers.background import BackgroundScheduler import time def job(): print('job 3s') time.sleep(5) if __name__=='__main__': sched = BackgroundScheduler(timezone='MST') sched.add_job(job, 'interval', id='3_second_job', seconds=3) sched.start() while(True): print('main 1s') time.sleep(1)运行这个程序,我们得到如下的输出:main 1s main 1s main 1s job 3s main 1s main 1s main 1s Execution of job "job (trigger: interval[0:00:03], next run at: 2018-05-07 02:44:29 MST)" skipped: maximum number of running instances reached (1) main 1s main 1s main 1s job 3s main 1s可见,3s时间到达后,并不会“重新启动一个job线程”,而是会跳过该次调度,等到下一个周期(再等待3s),又重新调度job()。为了能让多个job()同时运行,我们也可以配置调度器的参数max_instances,如下例,我们允许2个job()同时运行:from apscheduler.schedulers.background import BackgroundScheduler import time def job(): print('job 3s') time.sleep(5) if __name__=='__main__': job_defaults = { 'max_instances': 2 } sched = BackgroundScheduler(timezone='MST', job_defaults=job_defaults) sched.add_job(job, 'interval', id='3_second_job', seconds=3) sched.start() while(True): print('main 1s') time.sleep(1)运行程序,我们得到如下的输出:main 1s main 1s main 1s job 3s main 1s main 1s main 1s job 3s main 1s main 1s main 1s job 3s每个job是怎么被调度的通过上面的例子,我们发现,调度器是定时调度job()函数,来实现调度的。那job()函数会被以进程的方式调度运行,还是以线程来运行呢?为了弄清这个问题,我们写了如下程序:from apscheduler.schedulers.background import BackgroundScheduler import time,os,threading def job(): print('job thread_id-{0}, process_id-{1}'.format(threading.get_ident(), os.getpid())) time.sleep(50) if __name__=='__main__': job_defaults = { 'max_instances': 20 } sched = BackgroundScheduler(timezone='MST', job_defaults=job_defaults) sched.add_job(job, 'interval', id='3_second_job', seconds=3) sched.start() while(True): print('main 1s') time.sleep(1)运行程序,我们得到如下的输出:main 1s main 1s main 1s job thread_id-10644, process_id-8872 main 1s main 1s main 1s job thread_id-3024, process_id-8872 main 1s main 1s main 1s job thread_id-6728, process_id-8872 main 1s main 1s main 1s job thread_id-11716, process_id-8872可见,每个job()的进程ID都相同,但线程ID不同。所以,job()最终是以线程的方式被调度执行。来源:https://www.jb51.net/article/218332.htm
2022年05月26日
67 阅读
0 评论
0 点赞
2022-05-24
filter的基础用法
filter的基础用法对于列表(或其他序列类型),如果希望从中筛选出满足某个约束条件的子列表,我们一般的做法是使用一个for循环遍历每个元素然后执行相同约束条件判断,将满足条件的放入新的子列表中。例如,从列表中找出所有偶数子列表,并按对应的先后顺序放入子列表中:a = [1, 2, 3, 4, 5] b = [] for i in a: if i % 2 == 0: b.append(i)那么如果使用filter的话,使用filter函数使得代码变得更简洁:a = [1, 2, 3, 4, 5] def check(i): return i % 2 == 0 b = list(filter(check, a))示例content = "### #123 #234#568 #566#569#565#568" listdata = [i.strip() for i in content.split("#")] c = list(set(filter(lambda o: o, listdata))) print(listdata) print(c) # 输出 ['', '', '', '', '123', '234', '568', '566', '569', '565', '568'] ['566', '569', '565', '234', '123', '568']
2022年05月24日
22 阅读
0 评论
0 点赞
2022-05-24
对列表内的字典进行排序
降序排序alldate = [{'学号': 2.0, '姓名': '李四', '科目': '数学', '成绩': 77.0}, {'学号': 3.0, '姓名': '王五', '科目': '数学', '成绩': 78.0}, {'学号': 1.0, '姓名': '张三', '科目': '数学', '成绩': 90.0}, {'学号': 3.0, '姓名': '王五', '科目': '英语', '成绩': 76.0}, {'学号': 1.0, '姓名': '张三', '科目': '英语', '成绩': 90.0}, {'学号': 2.0, '姓名': '李四', '科目': '英语', '成绩': 91.0}, {'学号': 1.0, '姓名': '张三', '科目': '语文', '成绩': 88.0}, {'学号': 3.0, '姓名': '王五', '科目': '语文', '成绩': 88.0}, {'学号': 2.0, '姓名': '李四', '科目': '语文', '成绩': 89.0}] # 升序排序将reverse去掉即可 alldate.sort(key=lambda x: (x['成绩']), reverse=True) # alldate.reverse() print(alldate)多条件排序alldate.sort(key=lambda x: (x['成绩'], x['科目'])) # 按照科目和成绩进行双排序
2022年05月24日
17 阅读
0 评论
0 点赞
2022-05-09
Python *args和**kwargs
我们知道splat运算符解包多个值,并且知道函数参数有两种类型。若现在还未弄明白,那么可以将*args理解为变元的缩写,而**kwargs理解为关键字变元的缩写。各参数用于解压其各自的变元类型,允许使用可变字长变元列表进行函数调用。例如,创建一个函数表示学生的考试分数。def printScores(student,*scores): print(f"Student Name:{student}") for score in scores: print(score) printScores("Jonathan",100, 95, 88, 92, 99) """ Student Name: Jonathan 100 95 88 92 99 """噢,等等,我并未称呼其为*args?是的,“args”是一个标准化规范,但仍然只是一个名称。事实上,在*args中,唯一的星号是真正的参与者,创建了列表,其内容则是来自函数调用的位置参数(在这些定义变元后)。这些理清楚之后,**kwargs就很容易理解了。名称并不重要,重要的是双星号创建了字典,其内容是关键字参数,来自函数调用(在这些定义变元后)。为了更好地演示,我们创建一个函数,输出参加全国英语等级考试的人员名单。def printPetNames(owner,**pets): print(f"Owner Name:{owner}") for pet,name in pets.items(): print(f"{pet}:{name}") printPetNames("Jonathan", dog="Brock",fish=["Larry", "Curly", "Moe"],turtle="Shelldon") """ Owner Name: Jonathan dog: Brock fish: ['Larry', 'Curly', 'Moe'] turtle: Shelldon """
2022年05月09日
14 阅读
0 评论
0 点赞
2022-04-20
Python定时器
import threading import datetime def run(): print(datetime.datetime.now()) timer = threading.Timer(1, run) timer.start() # 这里才开始运行 if __name__ == '__main__': tq = threading.Timer(1, function=run) # 这里是创建线程 tq.start()
2022年04月20日
12 阅读
0 评论
1 点赞
2022-04-06
button和submit
如果是button请将button的类型改为type="button",因为浏览器会认为button按钮默认类型是submit,会提交数据从而导致整个页面刷新在ie浏览器中按钮的type默认是button,在其他浏览器(如火狐,chrome)则是submit
2022年04月06日
11 阅读
0 评论
0 点赞
2022-04-06
vue跨域问题
在vue-cli版本为2.x的情况下修改webpack.dev.conf.js中的devServer对象加入disableHostCheck: truedevServer: { disableHostCheck: true, }vue-cli版本3.0的情况下修改vue.config.jsmodule.exports = { devServer: { disableHostCheck: true, // 或者试试下面这个 allowedHosts:['.xxxx.com','.xxx.com'], 或者是all } }
2022年04月06日
9 阅读
0 评论
0 点赞
1
...
4
5