首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
14,233 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
11,470 阅读
3
gradle-5.4.1-all.zip下载
9,511 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
8,203 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
7,019 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
617
篇文章
累计收到
629
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
617
篇与
的结果
2020-08-06
使程序在Linux下后台运行
一、为什么要使程序在后台执行我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:1:我们这边是否关机不影响日本那边的程序运行。(不会像以前那样,我们这网络一断开,或一关机,程序就断掉或找不到数据,跑了几天的程序只能重头再来,很是烦恼)2:不影响计算效率2:让程序在后台跑后,不会占据终端,我们可以用终端做别的事情。二、怎么样使程序在后台执行方法有很多,这里主要列举两种。假如我们有程序pso.cpp,通过编译后产生可执行文件pso,我们要使pso在linux服务器后台执行。当客户端关机后重新登入服务器后继续查看本来在终端输出的运行结果。(假设操作都在当前目录下)方法1在终端输入命令: # ./pso > pso.file 2>&1 & 解释:将pso直接放在后台运行,并把终端输出存放在当前目录下的pso.file文件中。 当客户端关机后重新登陆服务器后,直接查看pso.file文件就可看执行结果(命令:#cat pso.file )。 方法2在终端输入命令:# nohup ./pso > pso.file 2>&1 &解释:nohup就是不挂起的意思,将pso直接放在后台运行,并把终端输出存放在当前目录下的pso.file文件中。当客户端关机后重新登陆服务器后,直接查看pso.file文件就可看执行结果(命令:#cat pso.file )。三、常用任务管理命令# jobs //查看任务,返回任务编号n和进程号# bg %n //将编号为n的任务转后台运行# fg %n //将编号为n的任务转前台运行# ctrl+z //挂起当前任务# ctrl+c //结束当前任务 注:如果要使在前天执行任务放到后台运行,则先要用ctrl+z挂起该任务,然后用bg使之后台执行。 附: 在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:$ ./test.sh & [1] 17208 $ jobs -l [1]+ 17208 Running ./test.sh &对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行:$ ./test.sh [1]+ Stopped ./test.sh $ bg %1 [1]+ ./test.sh & $ jobs -l [1]+ 22794 Running ./test.sh &但是如上方到后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1)$ echo $$ 21734 $ nohup ./test.sh & [1] 29016 $ ps -ef | grep test 515 29710 21734 0 11:47 pts/12 00:00:00 /bin/sh ./test.sh 515 29713 21734 0 11:47 pts/12 00:00:00 grep test$ setsid ./test.sh & [1] 409 $ ps -ef | grep test 515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh 515 413 21734 0 11:49 pts/12 00:00:00 grep test上面的试验演示了使用nohup/setsid加上&使进程在后台运行,同时不受当前shell退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可以使用disown命令:$ ./test.sh & [1] 2539 $ jobs -l [1]+ 2539 Running ./test.sh & $ disown -h %1 $ ps -ef | grep test 515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh 515 2542 21734 0 11:52 pts/12 00:00:00 grep test另外还有一种方法,即使将进程在一个subshell中执行,其实这和setsid异曲同工。方法很简单,将命令用括号() 括起来即可:$ (./test.sh &) $ ps -ef | grep test 515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh 515 12483 21734 0 11:59 pts/12 00:00:00 grep test注:本文试验环境为Red Hat Enterprise Linux AS release 4 (Nahant Update 5),shell为/bin/bash,不同的OS和shell可能命令有些不一样。例如AIX的ksh,没有disown,但是可以使用nohup -p PID来获得disown同样的效果。还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便:$ screen -dmS screen_test $ screen -list There is a screen on: 27963.screen_test (Detached) 1 Socket in /tmp/uscreens/S-jiangfeng. $ screen -r screen_test
2020年08月06日
746 阅读
0 评论
0 点赞
2020-08-06
vue+axios实现评论留言板
效果如图这里的评论数据以及添加数据都是用的FastAPI,然后再用axios发送请求,获取评论以及添加评论。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>工程快捷报备系统——By:Lan</title> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <link rel="stylesheet" href="static/css/bootstrap.min.css"> <style> .content { margin-top: 1.5rem; } </style> </head> <body> <div class="container"> <div class="row clearfix"> <div class="col-md-12 column"> <ul class="nav nav-tabs"> <li> <a href="./index.html">健康报备</a> </li> <li> <a href="./who.html">谁没报备</a> </li> <li> <a href="./ele.html">电费查询</a> </li> <li class="active"> <a href="./comment.html">留言板</a> </li> </ul> <div class="content" id="box"> <form action="" role="form"> <div class="form-group"> <label class="col-sm-1 control-label">昵称</label> <div class="col-sm-11"> <input v-model='newNick' type="text" class="form-control" id="nikename" v-model='newComment' placeholder="请输入昵称"> </div> <div class="form-group"> <label for="content" class="col-sm-1 control-label">内容</label> <div class="col-sm-11"> <textarea id="content" v-model='newComment' class="form-control" rows="3"></textarea> </div> </div> <div class="form-group" style="text-align: center;"> <input type="button" name="" value="添加" @click='addcomment' class="btn btn-primary"> <input type="reset" name="" value="重置" class="btn btn-danger"> </div> </div> </form> <table class="table table-bordered table-hover"> <caption class="text-success"> <h4>评论列表</h4> </caption> <thead> <tr class="text-info"> <th class="text-center">昵称</th> <th class="text-center">内容</th> <th class="text-center">时间</th> </tr> </thead> <tbody> <tr v-for="(item,index) in list" :key="index" class="text-warning text-center"> <td>{{item.nick }}</td> <td>{{item.comment}}</td> <td>{{item.add_Time | fmtTime('-')}}</td> </tr> <tr v-if="list.length === 0"> <td colspan="3">暂无评论,快来评论吧!</td> </tr> </tbody> </table> </div> </div> </div> </div> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="./static/js/bootstrap.min.js"></script> <script> Vue.filter('fmtTime', function(sourceTime, sep) { sourceTime = new Date(sourceTime); let y = sourceTime.getFullYear(); let m = sourceTime.getMonth() + 1; let d = sourceTime.getDate(); let h = sourceTime.getHours(); let M = sourceTime.getMinutes(); return y + sep + m + sep + d + ' ' + h + ':' + M; }); var app = new Vue({ el: '#box', data: { newNick: '', newComment: '', list: [], searchVal: '' }, mounted() { this.getcomment(); }, methods: { getcomment() { axios.get('/get_comment/', { params: { page: 1 } }) .then(res => { this.list = res.data; }) .catch(err => { console.error('获取数据失败' + err); }) }, addcomment() { axios.get('/add_comment/', { params: { nick: this.newNick, comment: this.newComment } }) .then(res => { alert('添加成功'); // 添加成功之后,重新获取列表数据 this.getcomment(); this.newComment = ''; }) .catch(err => { console.error(err); }) } }, }) </script> </body> </html>
2020年08月06日
1,009 阅读
0 评论
0 点赞
2020-08-05
多事之周,当事情多的时候不要急躁,逐一击破。
消失了近一个星期,我又回来了,总结一下这一周都有哪些麻烦事。首先,阿里云高校实践计划白嫖的服务器要到期了,然后续费要求通过一个巨难的考试,然后还得90分,很不幸的没通过,服务器上面还挂着机器人啥的一些小程序呢,可惜了,还得另寻机器来挂东西了。然后就是8月1号,2号的专升本考试,本科专业选的是软件工程,然后这次要考的四门分别是近代史,马克思,计算机网络基础,软件工程,这件事也一直没怎么上心,就是考试前几天才翻了下笔记这些,毕竟时间都用来研究编程了,哪有兴趣去学这些,结果自然而然咯,感觉凉凉了,让我最气的就是计算机网络基础,上课的时候老师着重的讲了IP地址这些,还有一个送分的HTMl,结果考试的时候,题目呢???亏我还把IP地址那个研究了一下,就连送分的HTML影子都没看见,不过也要看开点,自己付出了多少,也就收获了多少吧,10月份还有一次呢。天空真好看最糟心的就是手机一滑,后盖碎了,个人只有贴钢化膜的习惯,没有戴手机壳的习惯,因此那叫一个惨。于是自己从某宝买了一块后盖,在今天下午刚刚换好,幸运的是没出啥问题,完美的换下了后盖。第一次自己换后盖,还是有点小激动的,看视频都是使用吹风机这样的东西加热的,个人感觉有点暴力,于是打了两把游戏,让手机自热,哈哈,然后遇到了很有意思的一把,打着打着对面四个人全部掉线了。不过还好,成功的换下来了,果然是祸不单行呀。这一个星期网络上也发生了许多事情,比如几乎市面上所有的机器人框架纷纷关闭,从一开始的晨风404,然后就是酷Q,都是泪呀,才开始研究QQ机器人呢,目前还有一个机器人正在使用呢。用的是CQHTTP,结果没用几个月就没了,可惜了,不过刚好我白嫖的服务器也到期了,于是又将主要功能转移至WEB端,涂涂改改又是一晚上。然后呢,又将之前写的电费智能提醒系统改善了一下,新增了寝室的空调电费查询(部分寝室,空调和照明电量是分开的),又将公众号的模板消息替换了一下。事情总是组团来群殴我,一开始的时候遇到这么多事情还是很烦的,但是既来之则安之,反正躲不了,一个一个解决呗,解决的结果已经不重要了,至少去做了。当事情多的时候不要急躁,逐一击破他它。
2020年08月05日
968 阅读
3 评论
0 点赞
2020-07-29
176. 第二高的薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。+----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------+例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。+---------------------+| SecondHighestSalary |+---------------------+| 200 |+---------------------+来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/second-highest-salary著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。官方答案:SELECT (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1) AS SecondHighestSalary我写的时候没有弄他为null的情况,今天逛力扣才发现还有sql查询语句的题目。SELECT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1
2020年07月29日
917 阅读
0 评论
0 点赞
2020-07-26
Microsoft E5第二次迷之续费
今天刚好是距离到期还有一个月,然后又自动续费到了11月份最近这段时间都没怎么用OneDrive以及调用API了,随缘续费。又能白嫖3个月的Microsoft365全家桶了。
2020年07月26日
1,329 阅读
0 评论
0 点赞
2020-07-25
按数字批量重命名文件
今天在网上看到一个壁纸压缩包,是滴是滴,就是壁纸,文件是这样的本着互联网的分享精神,准备做一个随机图片,但是人家名字都不一样,咱也不好写代码,于是花了几分钟敲了几行代码,一秒钟就命名了530张图片。结果就是这样滴。咳咳,代码如下 def plRename(): sourcename = os.listdir('./') for index, value in enumerate(sourcename): try: os.rename(value, str(index) + '.' + value.split('.')[-1]) except EnvironmentError: print(EnvironmentError) print(f'{value}失败') input('完成!')
2020年07月25日
1,011 阅读
0 评论
0 点赞
2020-07-25
循环输入学生和成绩,最后按照总成绩进行排序
在某python交流群看到了这样一个问题然后到晚上9点似乎他还没有搞定,于是掏出了我的pycharm。一种是结构体(以前在C#里面是这么叫的),其实就是class,定义一个学生类,然后就是学生姓名,成绩,总成绩然后用sort排序(还有些手动排序方法快要忘了。),一种就是直接列表。第一种方法:# -*- coding: utf-8 -*- """ ------------------------------------------------- @ Author :Lan @ Blog :www.lanol.cn @ Date : 2020/7/24 @ Description:I'm in charge of my Code ------------------------------------------------- """ # 定义一个学生类初始值为姓名,语文成绩,数学成绩,英语成绩 class Student: def __init__(self, name, chinese, math, english): self.name = name self.chinese = chinese self.math = math self.english = english self.allGrade = chinese + math + english # 为了验证数值是否正确,加了个输出看一下 print(self.allGrade) # 定义一个列表,用来装载所有成绩 result = [] while True: # 录入信息 stuName = input("请输入姓名:") stuChinese = float(input("请输入语文:")) stuMath = float(input("请输入数学:")) stuEnglish = float(input("请输入英语;")) # 将每个人的信息实例化一个Student并存入列表。 result.append(Student(stuName, stuChinese, stuMath, stuEnglish)) # 判断是否继续添加 if input('是否继续添加(yes/no)') == 'no': break # 对结果进行排序 result = sorted(result, key=lambda a: a.allGrade, reverse=True) # 输出结果 for i in result: print(i.name)第二种方法# -*- coding: utf-8 -*- """ ------------------------------------------------- @ Author :Lan @ Blog :www.lanol.cn @ Date : 2020/7/24 @ Description:I'm in charge of my Code ------------------------------------------------- """ # 定义一个列表 result = [] while True: # 录入信息 stuName = input("请输入姓名:") stuChinese = float(input("请输入语文:")) stuMath = float(input("请输入数学:")) stuEnglish = float(input("请输入英语;")) # 装到列表 result.append([stuName, stuChinese, stuMath, stuEnglish, stuChinese + stuMath + stuEnglish]) # 判断是否继续 if input('是否继续添加(yes/no)') == 'no': break # 排序 result = sorted(result, key=lambda a: a[4], reverse=True) for i in result: print(i)冒泡排序# -*- coding: utf-8 -*- """ ------------------------------------------------- @ Author :Lan @ Blog :www.lanol.cn @ Date : 2020/7/24 @ Description:I'm in charge of my Code ------------------------------------------------- """ # 定义一个列表 result = [] while True: # 录入信息 stuName = input("请输入姓名:") stuChinese = float(input("请输入语文:")) stuMath = float(input("请输入数学:")) stuEnglish = float(input("请输入英语;")) # 装到列表 result.append([stuName, stuChinese, stuMath, stuEnglish, stuChinese + stuMath + stuEnglish]) # 判断是否继续 if input('是否继续添加(yes/no)') == 'no': break # 冒泡排序 for i in range(len(result)): for j in range(0, len(result) - i - 1): if result[j][4] < result[j + 1][4]: result[j], result[j + 1] = result[j + 1], result[j] for i in result: print(i)
2020年07月25日
817 阅读
2 评论
0 点赞
1
...
47
48
49
...
89