如果我输入以下代码:
f = open('/etc/issue', 'r')
out = f.readline()
f.close()
print out
我明白了:
Ubuntu 14.04.5 LTS \n \l
>>>
如果我输入:
out = f.readline().strip()
我明白了:
Ubuntu 14.04.5 LTS \n \l
>>>
(没有换行)
但我怎么才能得到:
Ubuntu 14.04.5 LTS
没有“\ n \ l”?
什么是“\ l”?
答案 0 :(得分:3)
\n
和\l
不是特殊字符,它们是文件/etc/issue
内容的一部分(请参阅the manpage for issue
。它们具有特殊含义,您可以查看在the manpage for agetty
。\n
表示"机器的名称"以及\l
" TTY的名称"。
如果您想从Ubuntu中的默认/etc/issue
文件中获取版本名称(请注意,可以编辑此文件以更改登录终端的外观),您可以执行以下操作:
out = f.readline().split('\\')[0].strip()
获取分发信息的更可靠方法是使用有点模糊的lsb_release
模块(APT包lsb-release
):
import lsb_release
release_name = lsb_release.get_distro_information()['DESCRIPTION']
答案 1 :(得分:1)
有很多方法。
将用空字符串替换它们:
out = f.readline()[:-6].strip()
或者摆脱最后几个字符:
var UserSchema = mongoose.Schema({
fullName: {
type: String,
trim: true
},
phone: {
type: String,
trim: true,
required: true,
},
gender: {
type: String,
enum: ['male', 'female'],
},
age: {
type: Number,
required: true
},
favorites: []
});
答案 2 :(得分:0)
/etc/issue
是prelogin消息(在登录提示之前打印的消息)。 (请参阅issue
和getty
的Ubuntu手册页,并且可能包含转义序列,例如双字符\n
,以指示其他进程添加节点名称 current_tty_name (非换行)。这就是您看到\n
和\l
的原因:它们不是单字符转义换行符和换行符。
要摆脱它们,你可以按照建议使用replace()
,或者使用正则表达式做同样的事情,但要注意逃避反斜杠。请注意,man getty
列出了十几个转义码。