成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 Lua 解析配置文件

系統 Linux
本文將討論一些利用 Lua 進行持久化配置的方法。

使用 Lua 配置持久化應用設置。

不是所有的應用都需要配置文件;對很多應用來說,在啟動時變得煥然一新對它們更有利。例如,簡單的工具就極少需要偏好項和設置在使用過程中保持穩(wěn)定不變。然而,當你編寫一個復雜的應用程序時,如果能讓用戶設置與應用的交互方式,以及應用與系統交互的方式會很不錯。這就是配置文件用來做的事情。本文將討論一些利用 Lua 進行持久化配置的方法。

選擇一種格式

關于配置文件很重要的兩點是一致性和可預見性。你不會希望為了保存用戶偏好項,將信息轉儲到文件中,然后再花幾天去編碼實現“逆向工程”,處理最后出現在文件里的隨機信息。

這里用一些常用的 ??配置文件格式??。Lua 有一些庫可以處理大多數常用的配置格式;在本文中,我會采用 INI 格式。

安裝庫

Lua 庫的核心倉庫是 ??Luarocks.org??。你可以在這個網站搜索庫,或者你可以安裝并使用 ??luarocks?? 終端命令。

Linux 環(huán)境中,你可以從發(fā)行版的軟件倉庫中下載它,例如:

$ sudo dnf install luarocks

在 macOS 上,請使用 ??MacPorts?? 或者 ??Homebrew??。在 Windows 上,請使用 ??Chocolatey??。

??luarocks?? 安裝后,你可以使用 ??search?? 子命令來搜索一個恰當的庫。如果你不知道庫的名字,可以通過關鍵詞來搜索這個庫,例如 ??ini??、xml??或者??json??,這取決于你想要用這個庫做什么。打個比方,你可以搜索??inifile`, 這個庫被我用來解析 INI 格式的文本文件。

$ luarocks search inifileSearch results:inifile 1.0-2 (rockspec) - https://luarocks.org 1.0-2 (src) - https://luarocks.org 1.0-1 (rockspec) - https://luarocks.org [...]

一個開發(fā)者容易犯的錯誤是在系統上安裝了這個庫卻忘了把它和應用打包。這會給沒有安裝這個庫的用戶帶來麻煩。為了防止這個問題發(fā)生,可以使用 ??--tree?? 選項將它安裝在項目的本地文件夾中。如果你沒有這個項目文件夾,那就先創(chuàng)建這個文件夾再安裝庫:

$ mkdir demo$ cd demo$ luarocks install --tree=local inifile

??--tree?? 選項指示 ??luarocks?? 創(chuàng)建一個新文件夾并在其中安裝你的庫,例如這個例子中的 ??local?? 文件夾。 使用這個簡單的技巧,你可以將所有你項目要使用的依賴項直接安裝到項目文件夾中。

配置代碼

首先,在一個名 ??myconfig.ini?? 的文件中創(chuàng)建一些 INI 數據。

[example]name=Tuxspecies=penguinenabled=false[demo]name=Beastiespecies=demonenabled=false

將這個文件保存到你的主目錄下,命名為 ??myconfig.ini??, 不要 存到項目文件夾下。你通常會希望配置文件獨立于你的文件存在,這樣當用戶卸載你的應用時,使用應用時產生的數據可以保存在系統中。有些用戶會刪除不重要的配置文件,但大多數不會。最終,如果他們要重裝這個應用,還會保留著所有的用戶偏好項。

配置文件的位置以技術來說并不重要,但每一個操作系統都有存儲它們的特定或者默認的路徑。在 Linux 中,這個路徑由 ??Freedesktop 規(guī)范?? 指定。它規(guī)定配置文件被保存在一個名為 ??~/.config?? 的隱藏文件夾中。為了操作時更加清晰明確,可以在主目錄下存儲配置文件,以便于使用和尋找。

創(chuàng)建第二個文件,命名為 ??main.lua??,并在你喜歡的文本編輯器中打開它。

首先,你必須告訴 Lua 你將想要使用的附加庫放置在哪里。??package.path?? 變量決定了 Lua 到哪里去尋找這些庫。你可以從終端中查看 Lua 默認的包地址:

$ Lua> print(package.path)./?.lua;/usr/share/lua/5.3/?.lua;/usr/share/lua/5.3/?/init.lua;/usr/lib64/lua/5.3/?.lua;/usr/lib64/lua/5.3/?/init.lua

在你的 Lua 代碼中,將你本地庫的路徑添加到 ??package.path?? 中:

package.path = package.path .. ';local/share/lua/5.3/?.lua

使用 Lua 解析 INI 文件

當包的位置確定以后,下一件事就是引入 ??inifile?? 庫并處理一些操作系統邏輯。即使這是一個很簡單的應用,代碼也需要從操作系統獲取到用戶主目錄的路徑,并建立在必要時將文件系統路徑返回給操作系統的通信方式。

package.path = package.path .. ';local/share/lua/5.3/?.luainifile = require('inifile')-- find home directoryhome = os.getenv('HOME')-- detect path separator-- returns '/' for Linux and Mac-- and '\' for Windowsd = package.config:sub(1,1)

現在你可使用 ??inifile?? 來從配置文件解析數據到 Lua 表中。一旦這些數據被導入進表中,你可以像查詢其他的 Lua 表一樣查詢它。

-- parse the INI file and-- put values into a table called confconf = inifile.parse(home .. d .. 'myconfig.ini')-- print the data for reviewprint(conf['example']['name'])print(conf['example']['species'])print(conf['example']['enabled'])

在終端中運行代碼可以看見結果:

$ lua ./main.luaTuxpenguinfalse

這看起來是正確的。試試在 ??demo?? 塊中執(zhí)行同樣的操作。

使用 INI 格式存儲數據

不是所有用來解析的庫都會讀寫數據(通常被稱為 _編碼 和 解碼),但是 ??inifile?? 會這樣做。這意味著你可以使用它對配置文件進行修改。

為了改變配置文件中的值,你可以對被解析的表中的變量進行設置,然后把表重寫回配置文件中。

-- set enabled to trueconf['example']['enabled'] = trueconf['demo']['enabled'] = true-- save the changeinifile.save(home .. d .. 'myconfig.ini', conf)

現在再來看看配置文件:

$ cat ~/myconfig.ini[example]name=Tuxspecies=penguinenabled=true[demo]name=Beastiespecies=demonenabled=true

配置文件

按照用戶的設想來存儲數據對程序來說是至關重要的。幸運的是,這對工程師來說是一個很常規(guī)的任務,大多數工作可能早已被完成了。只要找到一個好用的庫完成開放格式下編碼和解碼,你就能為用戶提供一致且持續(xù)的體驗。

以下是完整的演示代碼,可供參考。

package.path = package.path .. ';local/share/lua/5.3/?.lua'inifile = require('inifile')-- find home directoryhome = os.getenv('HOME')-- detect path separator-- returns '/' for Linux and Mac-- and '\' for Windowsd = package.config:sub(1,1)-- parse the INI file and-- put values into a table called confconf = inifile.parse(home .. d .. 'myconfig.ini')-- print the data for reviewprint(conf['example']['name'])print(conf['example']['species'])print(conf['example']['enabled'])-- enable Tuxconf['example']['enabled'] = true-- save the changeinifile.save(home .. d .. 'myconfig.ini', conf)
責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-07-05 12:09:58

Python編程語言

2010-02-03 09:19:31

Python模塊

2011-03-28 09:07:26

Nagios配置文件

2010-02-22 10:18:18

WCF配置文件

2021-07-13 05:47:40

GroovyJSON軟件開發(fā)

2011-08-29 16:48:50

Lua配置文件C++

2010-12-27 14:59:31

Outlook 配置文

2010-03-18 18:17:01

Python 配置文件

2011-09-08 16:07:13

Widget配置文件

2009-12-21 11:19:50

WCF配置文件

2009-11-05 10:30:41

WCF Address

2021-07-08 21:19:04

BashLinux

2020-10-20 10:12:00

Windows

2019-11-22 10:00:53

ICC配置文件Windows 10

2011-01-13 16:27:26

Linux配置文件

2009-06-08 16:44:00

Struts配置文件

2011-01-19 14:00:21

2010-12-28 16:35:32

Outlook 配置文

2011-08-30 11:00:10

MySQL ProxyLua

2010-02-02 18:19:52

Linux mplay
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久久久亚洲综合网 | 国产97色 | 国产精品久久久久一区二区三区 | 国产大学生情侣呻吟视频 | a在线观看 | 欧美一级黄色网 | 国产综合久久 | 免费观看www7722午夜电影 | 国产免费拔擦拔擦8x高清 | 91久久久久久久久久久久久 | 国产一区视频在线 | 亚洲精品视频免费 | 久久91精品久久久久久9鸭 | 夜夜爽99久久国产综合精品女不卡 | 麻豆视频在线看 | 欧美中文在线 | 欧美成人一区二区 | 在线午夜 | 拍戏被cao翻了h承欢 | 久久国产精品-久久精品 | 国产精品一区一区三区 | 亚洲国产精品精华素 | 精品欧美一区二区三区久久久 | 欧美精品一区二区三区在线播放 | 欧洲成人| 成在线人视频免费视频 | 欧美一区二区 | 在线观看日韩av | 久久久久久久久99 | 香蕉久久av | 美女天天干天天操 | 欧美在线视频a | 日韩精品亚洲专区在线观看 | 日韩精品一区二区三区视频播放 | 久久久久久久久精 | 亚洲免费婷婷 | 日本一区二区高清不卡 | 日韩av在线免费 | 日本午夜免费福利视频 | 视频在线一区 | 嫩草91在线 |