教程
信息差
资源
软件工具
技术笔记
AIGC
视频
Search
1
使用AI实现高精度钢琴曲转谱Piano Transcription简明使用教程
37,794 阅读
2
使用ESP8266Wifi模块制作Wifi杀手
37,467 阅读
3
unravel 让图片唱歌详细教程 Real Time Image Animation 项目
27,387 阅读
4
佳能相机刷Magic Lantern魔灯固件
23,505 阅读
5
战地3 正版账号免费分享!
16,213 阅读
教程
信息差
资源
软件工具
技术笔记
AIGC
视频
Search
标签搜索
python
前端
环境搭建
空镜素材
Ubuntu
markdown
神器
黑苹果
编码
技巧
Git
数据库
开发
下载工具
Youtube
CDN
PDF
OST
电影原声带
音乐
易小灯塔
累计撰写
176
篇文章
累计收到
44
条评论
首页
栏目
教程
信息差
资源
软件工具
技术笔记
AIGC
视频
页面
搜索到
175
篇与
的结果
2018-08-02
No package 'gnutls' found 解决办法
安装libosmocore的时候, 执行下面的操作, 发现会报错$ ./configure 报错如下configure: error: Package requirements (gnutls >= 2.12.0) were not met: No package 'gnutls' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBGNUTLS_CFLAGS and LIBGNUTLS_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. 这个时候 执行下面的语句可以解决这个问题$ sudo apt-get install libghc-gnutls-dev
2018年08月02日
9,121 阅读
0 评论
1 点赞
2018-08-02
No package 'fftw3f' found 解决办法
No package 'fftw3f' found 解决办法安装libosmocore的时候, 执行下面的操作, 发现会报错$ ./configure 报错如下configure: error: Package requirements (fftw3f >= 3.2.0) were not met: No package 'fftw3f' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFTW3F_CFLAGS and FFTW3F_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. 这个时候 执行下面的语句可以解决这个问题$ sudo apt-get install fftw3-dev libsndfile1-dev
2018年08月02日
7,943 阅读
0 评论
0 点赞
2018-08-02
Kali系统下安装libosmocore
Kali系统下安装libosmocore Kali系统下安装libosmocore时,使用apt-get install libosmocore找不到软件包,在软件中心也搜索不到,只得使用官网给出的方式进行了安装,安装可参照官网:http://bb.osmocom.org/trac/wiki/libosmocore1.准备工作编译libosmocore你需要以下工具:$ apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc $ apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc 以下(可选)库:$ apt-get install libpcsclite-dev 2.获取libosmocore获得libosmocore,你可以使用下面的Git的URL:$ git clone git://git.osmocom.org/libosmocore.git 3.编译安装编译并安装使之独立运行$ cd libosmocore/ $ autoreconf -i $ ./configure $ make $ sudo make install $ sudo ldconfig -i $ cd .. 在没有pcsclite库的情况下编译,运行:$ ./configure --disable-pcsc
2018年08月02日
1,795 阅读
0 评论
0 点赞
2018-07-24
YAML基本语法
YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态、。由于YAML使用空白字符和分行来分隔资料,使的他特别适合用grep、Python、Perl、Ruby操作。JSON的语法是YAML1.2版的子集,同时非常接近YAML1.0与1.1版的子集,因此大部分的JSON文件都可以被YAML的剖析器剖析。这是因为JSON的语法结构和YAML的内置格式相同。虽然大范围的分层也可以使用类似JSON的内置格式,不过YAML标准并不建议这样使用,除非这样编写能让文件可读性增加。YAML的许多扩展在JSON是找不到的,如:进阶资料形态、关系锚点、字串不需要双引号、映射资料形态会储存键值的顺序。在线DEMO http://nodeca.github.io/js-yaml/基本语法规则如下。大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格。 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可表示注释,从这个字符一直到行尾,都会被解析器忽略。YAML 支持的数据结构有三种。对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)纯量(scalars):单个的、不可再分的值以下分别介绍这三种数据结构。对象对象的一组键值对,使用冒号结构表示。animal: pets 转为 JavaScript 如下。{ animal: 'pets' } Yaml 也允许另一种写法,将所有键值对写成一个行内对象。hash: { name: Steve, foo: bar } 转为 JavaScript 如下。{ hash: { name: 'Steve', foo: 'bar' } } 数组一组连词线开头的行,构成一个数组。- Cat - Dog - Goldfish 转为 JavaScript 如下。[ 'Cat', 'Dog', 'Goldfish' ] 数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。- - Cat - Dog - Goldfish 转为 JavaScript 如下。[ [ 'Cat', 'Dog', 'Goldfish' ] ] 数组也可以采用行内表示法。animal: [Cat, Dog] 转为 JavaScript 如下。{ animal: [ 'Cat', 'Dog' ] } 四、复合结构对象和数组可以结合使用,形成复合结构。languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org 转为 JavaScript 如下。{ languages: [ 'Ruby', 'Perl', 'Python' ], websites: { YAML: 'yaml.org', Ruby: 'ruby-lang.org', Python: 'python.org', Perl: 'use.perl.org' } } 纯量纯量是最基本的、不可再分的值。以下数据类型都属于 JavaScript 的纯量。字符串布尔值整数浮点数Null时间日期数值直接以字面量的形式表示。number: 12.30 转为 JavaScript 如下。{ number: 12.30 } 布尔值用true和false表示。isSet: true 转为 JavaScript 如下。{ isSet: true } null用~表示。parent: ~ 转为 JavaScript 如下。{ parent: null } 时间采用 ISO8601 格式。iso8601: 2001-12-14t21:59:43.10-05:00 转为 JavaScript 如下。{ iso8601: new Date('2001-12-14t21:59:43.10-05:00') } 日期采用复合 iso8601 格式的年、月、日表示。 date: 1976-07-31 转为 JavaScript 如下。 { date: new Date('1976-07-31') } YAML 允许使用两个感叹号,强制转换数据类型。e: !!str 123 f: !!str true 转为 JavaScript 如下。{ e: '123', f: 'true' } 字符串字符串是最常见,也是最复杂的一种数据类型。字符串默认不使用引号表示。str: 这是一行字符串 转为 JavaScript 如下。{ str: '这是一行字符串' } 如果字符串之中包含空格或特殊字符,需要放在引号之中。str: '内容: 字符串' 转为 JavaScript 如下。{ str: '内容: 字符串' } 单引号和双引号都可以使用,双引号不会对特殊字符转义。s1: '内容\n字符串' s2: "内容\n字符串" 转为 JavaScript 如下。{ s1: '内容\n字符串', s2: '内容\n字符串' } 单引号之中如果还有单引号,必须连续使用两个单引号转义。str: 'labor''s day' 转为 JavaScript 如下。{ str: 'labor\'s day' } 字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。str: 这是一段 多行 字符串 转为 JavaScript 如下。{ str: '这是一段 多行 字符串' } 多行字符串可以使用|保留换行符,也可以使用>折叠换行。 this: | Foo Bar that: > Foo Bar 转为 JavaScript 代码如下。{ this: 'Foo\nBar\n', that: 'Foo Bar\n' } +表示保留文字块末尾的换行,-表示删除字符串末尾的换行。s1: | Foo s2: |+ Foo s3: |- Foo 转为 JavaScript 代码如下。{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' } 字符串之中可以插入 HTML 标记。message: | <p style="color: red"> 段落 </p> 转为 JavaScript 如下。{ message: '\n<p style="color: red">\n 段落\n</p>\n' } 引用锚点&和别名*,可以用来引用。defaults: &defaults adapter: postgres host: localhost development: database: myapp_development <<: *defaults test: database: myapp_test <<: *defaults 等同于下面的代码。&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。下面是另一个例子。defaults: adapter: postgres host: localhost development: database: myapp_development adapter: postgres host: localhost test: database: myapp_test adapter: postgres host: localhost 转为 JavaScript 代码如下。[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ] 函数和正则表达式的转换这是 JS-YAML 库特有的功能,可以把函数和正则表达式转为字符串。# example.yml fn: function () { return 1 } reg: /test/ 解析上面的 yml 文件的代码如下。var yaml = require('js-yaml'); var fs = require('fs'); try { var doc = yaml.load( fs.readFileSync('./example.yml', 'utf8') ); console.log(doc); } catch (e) { console.log(e); } 从 JavaScript 对象还原到 yaml 文件的代码如下。var yaml = require('js-yaml'); var fs = require('fs'); var obj = { fn: function () { return 1 }, reg: /test/ }; try { fs.writeFileSync( './example.yml', yaml.dump(obj), 'utf8' ); } catch (e) { console.log(e); }
2018年07月24日
1,817 阅读
0 评论
0 点赞
2018-07-23
详解Linux的nohup和&用法和区别
在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:$ /usr/local/mysql/bin/mysqld_safe –user=mysql &可是有很多程序并不像mysqld一样,这样我们就需要nohup命令,怎样使用nohup命令呢?这里讲解nohup命令的一些用法。$ nohup ./start.sh & &的意思是在后台运行, 什么意思呢? 意思是说, 当你在执行 ./start.sh & 的时候, 即使你用ctrl C, 那么start.sh照样运行(因为对SIGINT信号免疫)。 但是要注意, 如果你直接关掉shell后, 那么,start.sh进程同样消失。 可见, &的后台并不硬(因为对SIGHUP信号不免疫)。nohup的意思是忽略SIGHUP信号, 所以当运行nohup ./start.sh的时候, 关闭shell, 那么start.sh进程还是存在的(对SIGHUP信号免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那么start.sh进程也是会消失的(因为对SIGINT信号不免疫)所以, &和nohup没有半毛钱的关系, 要让进程真正不受shell中Ctrl C和shell关闭的影响, 那该怎么办呢? 那就用nohup ./start.sh &吧, 两全其美。如果你懂守护进程, 那么nohup ./start.sh &有点让start.sh成为守护进程的感觉。nohup不挂断地运行命令。no hangup的缩写,意即“不挂断”。一般理解&记住一个命令最简单的方法是记住它是什么缩写,就自然理解了这个命令。 nohup运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号;语法$ nohup Command [ Arg ... ] [ & ] nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。 如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。nohup和&的区别&是指在后台运行运行$ nohup --help Run COMMAND, ignoring hangup signals. 可以看到是“运行命令,忽略挂起信号”就是不挂断的运行,注意没有后台运行功能。就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出那么,我们可以巧妙的吧他们结合起来用就是$ nohup COMMAND & 这样就能使命令永久的在后台执行 例如:sh test.sh & 将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失nohup sh test.sh 将sh test.sh任务放到后台,关闭标准输入,前台不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。nohup sh test.sh & 将sh test.sh任务放到后台,但是依然可以使用标准输入,前台能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。
2018年07月23日
15,833 阅读
0 评论
2 点赞
2018-07-19
Python gevent协程发http请求
为什么要用协程,Python在执行并发任务时有:多线程用锁,很容易造成数据不稳定,无法使用发挥多核CPU的能力多进程耗资源Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。安装gevent安装: pip install greenlet#-*- coding: utf-8 -*- import urllib.request # url = "http://r.qzone.qq.com/cgi-bin/user/cgi_personal_card?uin=******" url = "http://gc.ditu.aliyun.com/geocoding?a="+urllib.request.quote("广州市") HEADER = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0'} # 自定义请求的方法,get post def f(url): import urllib import urllib.request data=urllib.request.urlopen(url).read() z_data=data.decode('UTF-8') print(z_data) # 我自己封装了gevent 的方法,重载了run from gevent import Greenlet class MyGreenlet(Greenlet): def __init__(self, func): Greenlet.__init__(self) self.func = func def _run(self): # gevent.sleep(self.n) self.func count = 3 green_let = [] for i in range(0, count): green_let.append(MyGreenlet(f(url))) for j in range(0, count): green_let[j].start() for k in range(0, count): green_let[k].join() 运行结果C:\Python3\python.exe D:/app/dgm/field_study.py {"lon":120.58531,"level":2,"address":"","cityName":"","alevel":4,"lat":31.29888} {"lon":120.58531,"level":2,"address":"","cityName":"","alevel":4,"lat":31.29888} {"lon":120.58531,"level":2,"address":"","cityName":"","alevel":4,"lat":31.29888}
2018年07月19日
1,308 阅读
0 评论
0 点赞
2018-07-14
F-Strings:超级好用的Python格式字符串!!
主要内容从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快!今天就开始使用f-string(后文称为F字符串) !首先, 我们要聊以下在F字符串出现之前我们怎么实现格式化字符的。旧时代的格式化字符串在Python 3.6之前,有两种将Python表达式嵌入到字符串文本中进行格式化的主要方法:%-formatting和str.format()。您即将看到如何使用它们以及它们的局限性。1: %-formatting这是Python格式化的OG(original generation),伴随着python语言的诞生。可以在Python文档中阅读更多内容。请记住,文档不建议使用%格式,其中包含以下注释:“The formatting operations described here exhibit a variety of quirks that lead to a number of common errors (such as failing to display tuples and dictionaries correctly).Using the newer formatted string literals or the str.format() interface helps avoid these errors. These alternatives also provide more powerful, flexible and extensible approaches to formatting text.”怎样使用 %-formatting字符串对象具有使用%运算符的内置操作,可以使用它来格式化字符串。name = "Eric" "Hello, %s." % name # 输出 'Hello, Eric.' 为了插入多个变量,必须使用这些变量的元组。以name = "Eric" age = 74 "Hello, %s. You are %s." % (name, age) # 输出 'Hello, Eric. You are 74.' 为什么 %-formatting不好用上面的代码示例足够易读。但是,一旦你开始使用几个参数和更长的字符串,将很快变得不太容易阅读。first_name = "Eric" last_name = "Idle" age = 74 profession = "comedian" affiliation = "Monty Python" "Hello, %s %s. You are %s. You are a %s. You were a member of %s." %</div> (first_name, last_name, age, profession, affiliation) # 输出 'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.' 这种格式不是很好,因为它是冗长的,会导致错误,比如不能正确显示元组或字典。2: str.format()这种更新的工作方式是在Python 2.6中引入的。怎样使用Use str.format()str.format()是对%-formatting的改进。它使用正常的函数调用语法,并且可以通过对要转换为字符串的对象的__format __()方法进行扩展。使用str.format(),替换字段用大括号标记:"Hello, {}. You are {}.".format(name, age) # 输出 'Hello, Eric. You are 74.' 通过引用其索引来以任何顺序引用变量:"Hello, {1}. You are {0}-{0}.".format(age, name) # 输出 'Hello, Eric. You are 74-74.' 但是,如果插入变量名称,则会获得额外的能够传递对象的权限,然后在大括号之间引用参数和方法:person = {'name': 'Eric', 'age': 74} "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age']) # 输出 'Hello, Eric. You are 74.' 也可以使用**来用字典来完成这个巧妙的技巧:"Hello, {name}. You are {age}.".format(**person) # 输出 'Hello, Eric. You are 74.' 与f-string相比,str.format()绝对是一个升级版本,但它并非总是好的。为什么 str.format() 并不好使用str.format()的代码比使用%-formatting的代码更易读,但当处理多个参数和更长的字符串时,str.format()仍然可能非常冗长。first_name = "Eric" last_name = "Idle" age = 74 profession = "comedian" affiliation = "Monty Python" print(("Hello, {first_name} {last_name}. You are {age}. " + "You are a {profession}. You were a member of {affiliation}.") </div> .format(first_name=first_name, last_name=last_name, age=age, </div> profession=profession, affiliation=affiliation)) # 输出 Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python. 如果想要传递给字典中的.format()的变量,那么你可以用.format(** some_dict)解压缩它,并通过字符串中的键引用这些值,但是必须有更好的的方法f-Strings:一种改进Python格式字符串的新方法F字符串在这里可以节省很多的时间。他们确实使格式化更容易。他们自Python 3.6开始加入标准库。也称为“格式化字符串文字”,F字符串是开头有一个f的字符串文字,以及包含表达式的大括号将被其值替换。表达式在运行时进行渲染,然后使用__format__协议进行格式化。与以下是f-strings可以让编程更轻松的一些方法。简单例子语法与str.format()使用的语法类似,但较少细节啰嗦。name = "Eric" age = 74 f"Hello, {name}. You are {age}." # 输出 'Hello, Eric. You are 74.' 使用大写字母F也是有效的:F"Hello, {name}. You are {age}." # 输出 'Hello, Eric. You are 74.' 任意表达式由于f字符串是在运行时进行渲染的,因此可以将任何有效的Python表达式放入其中。可以做一些非常简单的事情,就像这样:f"{2 * 37}" # 输出 '74' 可以调用函数f"{name.lower()} is funny." # 输出 'eric is funny.' 甚至可以使用带有f字符串的类创建对象。class Comedian: def __init__(self, first_name, last_name, age): self.first_name = first_name self.last_name = last_name self.age = age def __str__(self): return f"{self.first_name} {self.last_name} is {self.age}." def __repr__(self): return f"{self.first_name} {self.last_name} is {self.age}. Surprise!" new_comedian = Comedian("Eric", "Idle", "74") f"{new_comedian}" 'Eric Idle is 74.' __str __()和__repr __()方法处理对象如何呈现为字符串,因此您需要确保在类定义中包含至少一个这些方法。如果必须选择一个,请使用__repr __(),因为它可以代替__str __()。__str __()返回的字符串是对象的非正式字符串表示,应该可读。__repr __()返回的字符串是官方表示,应该是明确的。调用str()和repr()比直接使用__str __()和__repr __()更好。默认情况下,f字符串将使用__str __(),但如果包含转换标志!r,则可以确保它们使用__repr __():f"{new_comedian}" 'Eric Idle is 74.' f"{new_comedian!r}" 'Eric Idle is 74. Surprise!' 多行f-string多行字符串:message = (f"Hi {name}. " f"You are a {profession}. " f"You were in {affiliation}.") message # 输出 'Hi Eric. You are a comedian. You were in Monty Python.' 没必要将f放在多行字符串的每一行的前面。以下代码也能运行:message = (f"Hi {name}. " "You are a {profession}. " "You were in {affiliation}.") message # 输出 'Hi Eric. You are a {profession}. You were in {affiliation}.' 但是如果使用"""这将会发生什么:message = f""" Hi {name}. You are a {profession}. You were in {affiliation}. """ message # 输出 '\n Hi Eric. \n You are a comedian. \n You were in Monty Python.\n ' 性能f字符串中的f也可以代表“速度快”。f-字符串比%-formatting和str.format()都快。f-字符串是运行时渲染的表达式,而不是常量值。以下是文档摘录:“F-strings provide a way to embed expressions inside string literals, using a minimal syntax. It should be noted that an f-string is really an expression evaluated at run time, not a constant value. In Python source code, an f-string is a literal string, prefixed with f, which contains expressions inside braces. The expressions are replaced with their values.” (Source)在运行时,大括号内的表达式将在其自己的作用域中进行求值,然后将其与其余字符串组合在一起。以下是速度比较:%%timeit name = "Eric" age = 74 '%s is %s.' % (name, age) 202 ns ± 2.05 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) %%timeit name = "Eric" age = 74 '{} is {}.'.format(name, age) 244 ns ± 5.52 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) %%timeit name = "Eric" age = 74 '{name} is {age}.' 14.4 ns ± 0.0121 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each) 可以看到, 速度最快的就是f字符串.Python f-Strings:Pesky细节为什么F字符串很好,开始使用它们但请记住一些细节。引号您可以在表达式中使用各种类型的引号。只要确保在表达式中使用的f-字符串外部没有使用相同类型的引号即可。以下写法都是正确的:f"{'Eric Idle'}" 'Eric Idle' f'{"Eric Idle"}' 'Eric Idle' f"""Eric Idle""" 'Eric Idle' f'''Eric Idle''' 'Eric Idle' f"The \"comedian<span class="string">" is {name}, aged {age}." 'The "comedian" is Eric, aged 74.' 字典说在使用字典的时候。如果要为字典的键使用单引号,请记住确保对包含键的f字符串使用双引号。以下代码是有效的:comedian = {'name': 'Eric Idle', 'age': 74} f"The comedian is {comedian['name']}, aged {comedian['age']}." # 输出 'The comedian is Eric Idle, aged 74.' 但是,以下代码就是一个语法错误:f'The comedian is {comedian['name']}, aged {comedian['age']}.' # 输出 File "<ipython-input-40-cd7d8a3db23b>", line 1 f'The comedian is {comedian['name']}, aged {comedian['age']}.' ^ SyntaxError: invalid syntax 字典键周围使用与在f字符串外部使用相同类型的引号,则第一个字典键开头的引号将被解释为字符串的结尾。大括号为了使字符串出现大括号,您必须使用双大括号:f"{{74}}" '{74}' 但是,如果使用三个以上的大括号,则可以获得更多大括号:f"{{{{74}}}}" '{{74}}' 反斜杠正如之前所看到的,可以在f字符串的字符串部分使用反斜杠转义符。但是,不能使用反斜杠在f字符串的表达式部分中进行转义:f"{<span class="string">"Eric Idle\"}" # 输出 File "<ipython-input-43-35cb9fe0ccc1>", line 1 f"{\"Eric Idle\"}" ^ SyntaxError: f-string expression part cannot include a backslash lambda表达式如果需要使用lambda表达式,解析f-字符串的方式会稍微复杂一些。如果!, :或}不在括号,大括号,括号或字符串中,则它将被解释为表达式的结尾。由于lambda使用:,这可能会导致一些问题:f"{lambda x: x * 37 (2)}" # 输出 File "<fstring>", line 1 (lambda x) ^ SyntaxError: unexpected EOF while parsing 可以通过将您的lambda嵌套在圆括号中来解决此问题:f"{(lambda x: x * 37) (2)}" # 输出 '74' 结束语虽然仍然可以使用格式化字符串的较旧方式,但使用F字符串时可以更简洁,更易读,更方便,既快速又不易出错。
2018年07月14日
1,903 阅读
2 评论
6 点赞
2018-07-02
Ubuntu软件操作的相关命令
Ubuntu软件操作的相关命令sudo apt-get update 更新源 sudo apt-get install package 安装包 sudo apt-get remove package 删除包 sudo apt-cache search package 搜索软件包 sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等 sudo apt-get install package --reinstall 重新安装包 sudo apt-get -f install 修复安装 sudo apt-get remove package --purge 删除包,包括配置文件等 sudo apt-get build-dep package 安装相关的编译环境 sudo apt-get upgrade 更新已安装的包 sudo apt-get dist-upgrade 升级系统 sudo apt-cache depends package 了解使用该包依赖那些包 sudo apt-cache rdepends package 查看该包被哪些包依赖 sudo apt-get source package 下载该包的源代码 sudo apt-get clean && sudo apt-get autoclean 清理无用的包 sudo apt-get check 检查是否有损坏的依赖
2018年07月02日
3,577 阅读
0 评论
0 点赞
2018-06-28
解决VMware虚拟机桥接模式上不了网
前几天vmware升级到15版本, 发现突然桥接模式上不了网了, 但是nat模式就可以上, 很奇怪, 之前朋友也有碰到这样的问题的, 都是重装系统解决的. 我的笔记本用了很多年没重装过系统了, 没舍得重装, 就上网搜了下, 最后尝试解决了, 解决的方法如下首先右键点击网络状态那个图标点击更改适配器设置查看现在正在用的网卡, 我的是有线连接的然后打开vmware 点击编辑-虚拟网络编辑器点击更改设置桥接模式选择你刚才看到的网卡, 点击应用然后网络连接那断开再连接, 就可以成功联网了
2018年06月28日
3,793 阅读
0 评论
0 点赞
2018-06-28
virtualenvwrapper报错的解决办法
virtualenvwrapper 没配置好, 发现会报如下错误/usr/bin/python: No module named virtualenvwrapper virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenvwrapper has been installed for VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is set properly. 解决的办法编辑~/.bashrc文件的最下方加入下面语句:if [ -f ~/.local/bin/virtualenvwrapper.sh ]; then export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source ~/.local/bin/virtualenvwrapper.sh fi 保存后更新配置即可解决问题source ~/.bashrc
2018年06月28日
6,469 阅读
0 评论
0 点赞
2018-06-24
Ubuntu 添加root权限用户
$是普通管员,#是系统管理员,在Ubuntu下,root用户默认是没有密码的,因此也就无法使用(据说是为了安全)。想用root的话,得给root用户设置一个密码:sudo passwd root 然后会提示让你输入新的 UNIX 密码输入后再确认输入就可以完成root账号的设置了输入susu 输入密码后,就可以切换到root用户权限了, 此时我们发现命令行由$变成了#moin@moin:~$ root@moin:/home/moin#
2018年06月24日
3,050 阅读
0 评论
0 点赞
2018-06-18
了解 ShellShock(破壳漏洞)
在学习linux shell编程的时候, 看到资料上说bash版本过旧的话就可能受到破壳漏洞的攻击.下面就来了解一下什么是破壳漏洞什么是ShellShockShellShock是一个BashShell漏洞(据说不仅仅是Bash,其他shell也可能有这个漏洞).一般情况来说,系统里面的Shell是有严格的权限控制的,如果没有相应的权限,是根本看不到某些命令的存在,更不要说执行这些命令。但是,Bash在运行的过程中会调用操作系统的环境变量,并且会执行一些设置命令。通过ShellShock漏洞,入侵者可以把某些”本来没有权限执行的语句或者命令“,注入到环境变量里。当bash设置环境变量的时候,就会执行这些”被注入“命令。这样子便绕过用户权限的限制,把一些”没有权限执行的命令“,变成”具有执行权限的命令“了。从而可以在系统内任意执行Bash命令语句,胡作非为(相当于获得root超级用户权限)。漏洞成因bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。核心的原因在于在输入的过滤中没有严格限制边界,没有做合法化的参数判断。漏洞范围:Bash 版本小于等于4.3防御办法Bash 升级到最新的版本
2018年06月18日
732 阅读
0 评论
0 点赞
2018-06-12
简单记录W350ETQ成功安装黑苹果10.13.4
先看一下安装成功效果前言: 这台笔记本2013年就弄过黑苹果了, 在游戏本之家写的安装记录http://www.cbber.com/forum.php?mod=viewthread&tid=51938去年电脑换主板刷了osmosis 上了完美的黑苹果, 最近把笔记本升级了下 . 现在的配置为CPU I7 3615QM内存 16G储存 4500G(机械2Tx2+500G固态)看了下远景的帖子, 折腾了几天也把这台老游戏本装上了黑苹果, 虽然完美是很难的, 要求也不高, 现在能正常使用总结一下流程:分好区制作好安装盘安装系统完善实战分区采用Gpt分区 uefi的四叶草引导系统首先就是要分好区, 找个分区工具分50G以上的空间出来, 用来安装mac系统, 我分了150G作为系统盘,700G作为系统备份和软件以及储存其他文件(mac系统下不能直接读写windows的NTFS分区的盘) .注意点就是此硬盘要分个200m以上的efi分区才能在mac的磁盘操作软件里正常格式化nfs+分区盘, 以及这200m空间用于存储启动用的文件.制作安装盘到远景下这个镜像http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1780088链接: https://pan.baidu.com/s/1S4n5VRNfQzuh46zHm_voXA 密码: p9bf制作镜像需要一个大于5g的U盘, 内存卡+读卡器也是可以的.制作的过程就是TransMac制作安装盘, 网上教程很多不再描述.安装安装的过程跟网上的那些基本没什么区别, 用u盘启动, 然后格盘安装.需要注意的是. 需要进入四叶草的启动界面的时候, 要屏蔽掉独显, 按o键进入四叶草设置, 就是Config - Graphics Injector中取消NvidiaWeb的勾安装初始完了重启后要手动切换到安装的那个分区启动继续完成安装.完善基本完善就是启动项, 把四叶草的配置文件NvidiaWeb那设置为False然后复制到那个200m分区里, 就可以正常启动了这个镜像集成了很多驱动, WiFi和蓝牙要换网卡才可以, 暂时不搞.其他完善可以去泡论坛完善.先简单记录这些, 有时间再写详细点
2018年06月12日
5,081 阅读
1 评论
1 点赞
2018-06-04
学习到了几个比较舒服的代码风格
学习到了几个比较舒服的代码风格 看了别人的写的代码, 学习到了几个比较舒服的代码风格自定义Log替换print使用自定义log()def log(*args, **kwargs): '''替代print''' print('log', *args, **kwargs) log() 写入到本地logimport time def log(*args, **kwargs): format = '%Y/%m/%d %H:%M:%S' value = time.localtime(int(time.time())) dt = time.strftime(format, value) with open('log.txt', 'a', encoding='utf-8') as f: print(dt, *args, file=f, **kwargs) 字典函数函数存到字典里, 方便以后调用func_list = { 'func1' = func1(), 'func2' = func2(), } func_list.get('func1') 字典传参if __name__ == '__main__': config = dict( debug=True, host='127.0.0.1', port=8000, # 这样写参数方便注释 ) app.run(**config) 多模块导入from flask import ( Flask, request, render_template, redirect, ) JavaScript自定义日志var log = function(){ console.log.apply(console, arguments) } log('代码')
2018年06月04日
925 阅读
0 评论
0 点赞
2018-05-25
使用you-get 批量下载视屏
使用 pyquery,requests,配合 you-get 写了一个小脚本来自动下载视频到指定的目录,需本机已安装you-get。代码import os import requests from pyquery import PyQuery as pq def get_urls(url): """ 解析网页数据,获得目标url """ response = requests.get(url) if response.status_code == 200: # print(response.text) html = response.text doc = pq(html) a_list = doc('li.video a.title') # print(a_list) print(type(a_list)) url_list = [a.attr('href').strip('//') for a in a_list.items()] print(url_list) return url_list return None def cmd_download(url): """ 逐条进行下载视频 """ try: info = os.system(r'you-get --debug -o C:\test {}'.format(url)) print(info) except Exception as e: print(e) cmd_download(url) def main(): """ 函数的主入口 """ for i in range(1, 3): url = 'https://search.bilibili.com/video?keyword=%E8%90%A7%E4%BA%95%E9%99%8C&order=totalrank&page=' + str(i) url_list = get_urls(url) if url_list is not None: [cmd_download(url) for url in url_list] if __name__ == '__main__': main()
2018年05月25日
2,129 阅读
0 评论
0 点赞
1
...
5
6
7
...
12