分类 技术 下的文章

树莓派是一种物美价廉的单板计算机,在很多场景都很有用。不过,在树莓派 4 之前,它作为快速的桌面替代品并不是一个特别合适的选择。

所以,树莓派 4 以其新的功能改变了游戏规则。但是,它与树莓派 3 相比如何?

树莓派 3 仍然值得考虑吗?或者,你应该去买最新和更强大的树莓派 4?

在这篇文章中,我们试图通过强调两者之间的一些关键差异来为你提供一些答案。

首先,让我们看一下两者提供的规格:

树莓派 3 的规格

树莓派 3 满足了一个基本入门 DIY 项目的所有要求。如果 树莓派 Zero 或 树莓派 Zero W 不符合你的要求,那么树莓派 3 是一个物美价廉的选择:

  • 四核 1.2GHz 博通 BCM2837 64 位 CPU
  • 1GB 内存
  • 无线局域网和低功耗蓝牙(BLE)
  • 以太网
  • 40 针扩展 GPIO
  • 4 个 USB 2 端口
  • 4 极立体声输出和复合视频端口
  • 全尺寸的 HDMI
  • CSI 摄像机端口
  • DSI 显示端口
  • 用于操作系统和存储数据的微型 SD 端口
  • 升级后的开关式微型 USB 电源,最高可达 2.5A 电流

树莓派 4 的规格

  • 博通 BCM2711,四核 Cortex-A72(ARM v8)64 位 SoC @ 1.5GHz
  • 2GB、4GB 或 8GB LPDDR4-3200
  • 2.4 GHz 和 5.0 GHz IEEE 802.11ac 无线,蓝牙 5.0,BLE
  • 千兆位以太网
  • 2 个 USB 3.0 端口
  • 2 个 USB 2.0 端口
  • 40 针 GPIO 接头(向后兼容)
  • 2 个微型 HDMI 端口(最多可支持 4kp60)
  • 2 线 MIPI DSI 显示端口
  • 2 线 MIPI CSI 摄像头端口
  • 4 极立体声音频和复合视频端口
  • H.265(4kp60 解码),H264(1080p60 解码,1080p30 编码)
  • OpenGL ES 3.1,Vulkan 1.0
  • 用于操作系统和存储数据的 MicroSD 卡插槽
  • 通过 USB-C 接口的 5V 直流电
  • 通过 GPIO 接头的 5V 直流电
  • 通过以太网供电

内存(RAM)选项

对于树莓派机型,通常情况下,你会得到一个包括 1 或 2GB 内存的单一产品阵容。

树莓派 3B+ 就是这种情况。如果你不需要更多的内存,树莓派 3 可以就是一个不错的解决方案,可以满足所有常规 DIY 项目的需求。

然而,对于树莓派 4,你可以选择 2GB、4GB 和 8GB 的版本。所以,如果你想完成更多的事情,或者在你的树莓派板上实现多个任务,树莓派 4 应该是一个不错的选择。

性能差异

尽管这两块板子都采用了博通公司的芯片,但树莓派 4 的性能明显更快。

如果你想把它作为你的迷你桌面的替代品,或者想为你的任务获得更好的计算能力,树莓派 4 将是明显的选择。

说到树莓派 3,它配备了一个四核 1.2GHz 的博通 BCM2837 64 位 CPU。它是一个能够完成各种任务的芯片。

连接能力

两块树莓派板都提供了一个 40 针的扩展 GPIO 接头。

然而,说到 USB 连接时,树莓派 4 提供了两个 USB 3.0 端口以及另外两个 USB 2 端口。而树莓派 3 只限于两个 USB 2 端口。

因此,如果你需要更快的数据传输速度,USB 3.0 端口应该会有帮助。例如,如果你要使用任何 媒体服务器软件,这可以派上用场。

除此之外,树莓派 4 上还有 USB-C 的存在,如果 USB 配件需要,它可以用来给电路板供电(5V DC)。

双显示器与相机支持

虽然树莓派 3 提供了一个全尺寸的 HDMI 端口、DSI 端口和 CS 端口,但它并不具有双显示器支持。

有了树莓派 4,你可以得到两个微型 HDMI 端口,一个双通道 DSI 端口和一个双通道 CSI 摄像头端口。

你应该买哪一个?

规格树莓派 3树莓派 4
处理器四核 1.2GHz 博通 BCM2837四核 1.5GHz 博通BCM2711
RAM1 GB高达 8 GB
蓝牙BLE蓝牙 5.0
USB端口4 x USB 2.02 x USB 3.0,2 x USB 2.0
无线连接是,2.4 GHz & 5 GHz 频段支持
显示端口1 x HDMI,1 x DSI2 x micro-HDMI,1 个 DSI
电源microUSB 和 GPIO,高达 2.5 A5V DC,通过 USB-C 和GPIO(3 A)
MicroSD 插槽
价格35 美元35 美元(1 GB 内存)、45 美元(2 GB 内存)、55 美元(4 GB 内存)、75 美元(8 GB 内存)

如果你想要更快的数据传输,支持双显示器,以及更好的性能,树莓派 4 是一个很好的选择。

考虑到 2GB 内存的树莓派 4 基本型号的价格约为 35 美元。以几乎相同的价格选择 1GB 的树莓派 3 型号,实在是毫无意义。

当然,除非你能得到一个更便宜的价格,并且有特定的要求。树莓派 4 总体上是一个明确的选择。

然而,有一些事情,如板子发热和其他潜在的问题,你可能想在决定之前探讨一下。树莓派 3 已被证明能在许多项目中发挥作用,而树莓派 4 是相当新的,可能还没有经过各种项目的测试。

一旦你确定了这一点,你就可以继续得到它们中的任何一个。

你喜欢用什么?你都试过了吗?请在下面的评论中告诉我们。


via: https://itsfoss.com/raspberry-pi-3-vs-4/

作者:Ankush Das 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

环境变量几乎在每种命令行环境中都是很有帮助的,自然包括 FreeDOS 。

几乎在每个命令行环境中的一个有用的功能是 环境变量。其中的一些变量允许你控制命令行的行为或功能,其它的变量仅允许你存储可能稍后需要的数据,在 FreeDOS 中也使用了环境变量。

在 Linux 上的变量

在 Linux 上,你可能已经熟悉其中的一些重要的环境变量。在 Linux 上的 Bash shell 中,PATH 变量标示着 shell 可以在哪里找到程序和命令。例如,在我的 Linux 系统上,我的 PATH 值如下:

bash$ echo $PATH
/home/jhall/bin:/usr/lib64/ccache:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin

这意味着,当我输入一个像 cat 这样的命令的名称时,Bash 将会按顺序检查我在 PATH 变量中所列出的每个目录:

  1. /home/jhall/bin
  2. /usr/lib64/ccache
  3. /usr/local/bin
  4. /usr/local/sbin
  5. /usr/bin
  6. /usr/sbin

在我的实例中,cat 命令位于 /usr/bin 目录,因此,完整的路径是 /usr/bin/cat

为在 Linux 上设置一个环境变量,你可以输入一个变量的名称,接着输入一个等于符号(=),接着输入一个要存储在变量中的值。为了随后使用 Bash 引用这个值,你需要在变量的名称前输入一个美元符号($)。

bash$ var=Hello
bash$ echo $var
Hello

在 FreeDOS 上的变量

在 FreeDOS 上,环境变量提供一种类似的功能。一些变量控制 DOS 系统的行为,另一些变量用于存储一些临时值。

为在 FreeDOS 上设置一个环境变量,你需要使用 SET 关键字。FreeDOS 是 不区分大小写的 ,因此你可以输入大写字母也可以使用小写字母。接下来,像你在 Linux 上一样设置变量,使用变量名称,一个等于符号(=),你想要存储的值。

不过,在 FreeDOS 中引用或 扩展 一个环境变量的值的方法,与你在 Linux 上所使用的方法是完全不同的。在 FreeDOS 中,你不能使用美元符号($)来引用一个变量。你反而需要使用百分符号 (%)来包围变量的名称。

Use % (not $) to reference a variable's value

在名称前后使用百分符号是非常重要,因为这就是 FreeDOS 知悉变量名称在哪里开始和结束的方式。这是非常有用的,因为它会允许你引用一个变量的值,与此同时,它会立即附加(或预置)其它的文本到值中。让我通过设置一个新的名称为 reply 的值为 yes 的变量,然后在 “11” 之前和 “22” 之后引用这个值来演示这一点:

Set and reference an environment variable

因为 FreeDOS 是不区分大小写的,所以你可以使用大写字母称或小写字母的变量名称以及 SET 关键字。不过,变量的值将使用你在命令行中所输入的字母。

最后,你可以看到当前在 FreeDOS 中定义的所有的环境变量。不使用任何参数的 SET 关键字将显示所有的变量,因此你可以一目了然:

Show all variables at once with SET

环境变量是一个有用的基本的命令行环境,同样适用于 FreeDOS 。你可以设置你自己的变量以满足你自己的需要,但是要仔细地更改 FreeDOS 使用的一些变量。这些变量会更改你正在运行的 FreeDOS 系统的行为:

  • DOSDIR:FreeDOS 安装目录的位置,通常是 C:\FDOS
  • COMSPEC:FreeDOS 的 shell 的当前实例,通常是 C:\COMMAND.COM%DOSDIR%\BIN\COMMAND.COM
  • LANG:用户的首选语言
  • NLSPATH:系统语言文件的位置,通常是 %DOSDIR%\NLS
  • TZ:系统的时区
  • PATH:一个目录列表,FreeDOS 可以在其中找到要运行的程序,例如 %DOSDIR%\BIN
  • HELPPATH:系统文档文件的位置,通常是 %DOSDIR%\HELP
  • TEMP:一个临时目录,FreeDOS 在其中存储来自每个命令的输出,如同它在命令行上的程序之间的 “管道” 数据
  • DIRCMD:一个控制 DIR 命令如何显示文件和目录的变量,通常设置 /OGNE 来排序(O)内容,先通过分组(G)目录,接下来按照名称(N) 、扩展名(E)来排序条目

如果你偶然间更改了任意的 FreeDOS 的 “内部” 变量,你可能会阻碍 FreeDOS 的一些部分的正常工作。在这种情况下,只需要简单地重新启动你的计算机,FreeDOS 将会按照系统默认值重新设置变量。


via: https://opensource.com/article/21/6/freedos-environment-variables

作者:Jim Hall 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 setuptools 来向用户交付 Python 代码。

 title=

你花了几周的时间来完善你的代码。你已经对它进行了测试,并把它发送给一些亲近的开发者朋友以保证质量。你已经将所有的源代码发布在 你的个人 Git 服务器 上,并且从一些勇敢的早期使用者收到了一些有用的错误报告。现在你已经准备好将你的 Python 代码提供给全世界。

就在这时你遇到一个问题。你不知道如何交付产品。

将代码交付给它的目标用户是一件大事。这是软件开发的一个完整的分支,是 CI/CD 中的 “D”,但很多人都忘记了,至少到最后才知道。我写过关于 AutotoolsCmake 的文章,但有些语言有自己的方法来帮助你将你的代码提供给用户。对于 Python 来说,向用户提供代码的一个常见方法是使用 setuptools

安装 setuptools

安装和更新 setuptools 的最简单方法是使用 pip

$ sudo python -m pip install --upgrade setuptools

示例库

我创建了一个简单的 Python 库,名为 myhellolib,来作为需要打包的示例代码。这个库接受一个字符串,然后用大写字母打印出这个字符串。

它只有两行代码,但项目结构很重要,所以首先创建目录树:

$ mkdir -p myhellolib.git/myhellolib

为了确认这个项目是一个可导入的库(即 Python “模块”),在代码目录中创建一个空文件 __init__.py,同时创建一个包含代码的文件:

$ touch myhellolib.git/myhellolib/__init__.py
$ touch myhellolib.git/myhellolib/myhellolib.py

myhellolib.py 文件中,输入简单的 Python 代码:

def greeter(s):
    print(s.upper())

这就是写好的库。

测试它

在打包之前,测试一下你的库。创建一个 myhellolib.git/test.py 文件并输入以下代码:

import myhellolib.myhellolib as hello
hello.greeter("Hello Opensource.com.")

运行该脚本:

$ cd myhellolib.git
$ python ./test.py
HELLO OPENSOURCE.COM

它可以工作,所以现在你可以把它打包了。

Setuptools

要用 setuptools 打包一个项目,你必须创建一个 .toml 文件,将 setuptools 作为构建系统。将这段文字放在项目目录下的 myhellolib.toml 文件中。

[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"

接下来,创建一个名为 setup.py 的文件,包含项目的元数据:

from setuptools import setup

setup(
   name='myhellolib',
   version='0.0.1',
   packages=['myhellolib'],
   install_requires=[
      'requests',
      'importlib; python_version == "3.8"',
   ],
)

不管你信不信,这就是 setuptools 需要的所有设置。你的项目已经可以进行打包。

打包 Python

要创建你的 Python 包,你需要一个构建器。一个常见的工具是 build,你可以用 pip 安装它:

$ python -m pip install build --user

构建你的项目:

$ python -m build

过了一会儿,构建完成了,在你的项目文件夹中出现了一个新的目录,叫做 dist。这个文件夹包含一个 .tar.gz 和一个 .whl 文件。

这是你的第一个 Python 包! 下面是包的内容:

$ tar --list --file dist/myhellolib-0.0.1.tar.gz
myhellolib-0.0.1/
myhellolib-0.0.1/PKG-INFO
myhellolib-0.0.1/myhellolib/
myhellolib-0.0.1/myhellolib/__init__.py
myhellolib-0.0.1/myhellolib/myhellolib.py
myhellolib-0.0.1/myhellolib.egg-info/
myhellolib-0.0.1/myhellolib.egg-info/PKG-INFO
myhellolib-0.0.1/myhellolib.egg-info/SOURCES.txt
myhellolib-0.0.1/myhellolib.egg-info/dependency_links.txt
myhellolib-0.0.1/myhellolib.egg-info/requires.txt
myhellolib-0.0.1/myhellolib.egg-info/top_level.txt
myhellolib-0.0.1/setup.cfg
myhellolib-0.0.1/setup.py

$ unzip -l dist/myhellolib-0.0.1-py3-none-any.whl 
Archive:  dist/myhellolib-0.0.1-py3-none-any.whl
Name
----
myhellolib/__init__.py
myhellolib/myhellolib.py
myhellolib-0.0.1.dist-info/METADATA
myhellolib-0.0.1.dist-info/WHEEL
myhellolib-0.0.1.dist-info/top_level.txt
myhellolib-0.0.1.dist-info/RECORD
-------
6 files

让它可用

现在你知道了打包你的 Python 包是多么容易,你可以使用 Git 钩子、GitLab Web 钩子、Jenkins 或类似的自动化工具来自动完成这个过程。你甚至可以把你的项目上传到 PyPi,这个流行的 Python 模块仓库。一旦它在 PyPi 上,用户就可以用 pip 来安装它,就像你在这篇文章中安装 setuptoolsbuild 一样!

当你坐下来开发一个应用或库时,打包并不是你首先想到的事情,但它是编程的一个重要方面。Python 开发者在程序员如何向世界提供他们的工作方面花了很多心思,没有比 setuptools 更容易的了。试用它,使用它,并继续用 Python 编码!


via: https://opensource.com/article/21/11/packaging-python-setuptools

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你在 Ubuntu 上使用终端的时间很长,你可能会希望调整终端的字体和大小以获取一种良好的体验。

更改字体是一种最简单但最直观的 Linux 的终端自定义 的方法。让我向你展示在 Ubuntu 中更改终端的字体的详细步骤,以及一些字体选择的提示和建议。

注意:这些步骤可能也对大多数的其它的 Linux 的终端模拟器 有效,但是你访问选项的方法可能会有所不同。

使用 GUI 更改 Ubuntu 的终端的字体和大小

步骤 1. 在 Ubuntu 中打开终端窗口 ,方法是按 Ctrl+Alt+T 组合键。

步骤 2. 打开终端“ 首选项 Preferences ”。你可以单击菜单按钮来找到它。

你也可以右击终端屏幕的任意位置来访问首选项,如下图所示。

步骤 3. 现在,你应该能够访问针对终端的设置。在默认情况下,在这里将会有一个未命名的配置文件。这就是默认的配置文件。我建议创建一个新的配置文件,以便你的更改不会影响默认的设置。

步骤 4. 为了更改字体,你需要启用“ 自定义字体 Custom font ” 选项,接下来单击 “Monospace Regular” 。

它将显示针对这个选项的可用的一个字体列表。

在这里,你可以在字体列表的底部快速预览字体,也可以调整你的 Ubuntu 的终端的字体大小。

在默认情况下,字体的大小是 12 ,字体的样式是 Ubuntu mono

步骤 5. 最后,你也可以搜索你喜欢的字体样式,并在查看预览和调整字体大小后,通过点击 “ 选择 Select ” 来完成更改字体。

这就是全部的步骤。你已经成功地更改字体。在下面的图像中查看更改。移动划款来查看不同点。

Ubuntu terminal font change

获取针对 Ubuntu 的终端的新字体的提示

你可以中从因特网上下载 TTF 格式的字体文件,右击这些 TTF 文件 可以很容易在 Ubuntu 中安装这些新的字体

你可以打开一个新的终端窗口来加载新安装的字体。

不过,请记住,Ubuntu 不会在终端中显示所有新安装的字体。为什么?因为终端已经被分配使用 monospaced 字体。如果字体中字母间靠得很近的,那看起来就很诡异了。一些字体不能清晰区分字母 “o” 和数字 “0” 。同样,你也可能面临区分小写字母 “l” 和小写字母 “i” 的难题。

这就是为什么你会在终端中所看到的字体的名称中通常会带有 “mono” 的原因。

一般来说,在字体方面可能会有很多可读性难题,这可能会造成更加混乱的局面。因此,最好选择一种不会在终端上使人难易阅读的字体。

你还应该检查在你增大/减少字体大小期间该字体是否看起来良好/诡异,以确保在你自定义你的终端时没有问题。

针对终端自定义的字体建议

Free mono 和 Noto mono 是默认字体选择列表中可用的一些好字体,可应用于你的终端。

你可以尝试 在 Linux 中安装新的字体 ,像 JetBrains MonoRobo Mono 、Larabiefont 、Share Tech Mono 以及来自 Google 和其它来源的字体。

你喜欢在 Ubuntu 的终端上使用什么样的字体和大小?请在下面的评论区告诉我们!


via: https://itsfoss.com/change-terminal-font-ubuntu/

作者:Ankush Das 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

为你的用户提供选项是任何应用的一个重要功能,而 Commander.js 使它变得容易做到。你最喜欢的 JavaScript 命令行构建器是什么?

 title=

JavaScript 是一种为 Web 开发的语言,但它的用处已经远远超出了互联网的范畴。由于 Node.js 和 Electron 这样的项目,JavaScript 既是一种通用的脚本语言,也是一种浏览器组件。有专门设计的 JavaScript 库来构建命令行界面。是的,你可以在你的终端中运行 JavaScript。

现在,当你在终端中输入一个命令时,一般都有 选项,也叫 开关标志,你可以用来修改命令的运行方式。这是由 POSIX 规范 定义的一个有用的惯例,所以作为一个程序员,知道如何检测和解析这些选项是很有帮助的。要从 JavaScript 获得此功能,使用旨在简化构建命令行界面的库很有用。我最喜欢的是 Commander.js。它很简单,很灵活,而且很直观。

安装 node

要使用 Commander.js 库,你必须安装 Node.js。在 Linux 上,你可以用你的包管理器安装 Node。例如,在 Fedora、CentOS、Mageia 和其他系统上:

$ sudo dnf install nodejs

在 Windows 和 macOS 上,你可以 从 nodejs.org 网站下载安装程序

安装 Commander.js

要安装 Commander.js,请使用 npm 命令:

$ npm install commander

在你的 JavaScript 代码中添加一个库

在 JavaScript 中,你可以使用 require 关键字在你的代码中包含(或者导入,如果你习惯于 Python)一个库。创建一个名为 example.js 的文件,并在你喜欢的文本编辑器中打开它。在顶部添加这一行,以包括 Commander.js 库:

const { program } = require('commander');

JavaScript 中的选项解析

要解析选项,你必须做的第一件事是定义你的应用可以接受的有效选项。Commander.js 库可以让你定义短选项和长选项,同时还有一个有用的信息来澄清每个选项的目的。

program
  .description('A sample application to parse options')
  .option('-a, --alpha', 'Alpha')
  .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');

第一个选项,我称之为 --alpha(简写 -a),是一个布尔型开关:它要么存在,要么不存在。它不需要任何参数。第二个选项,我称之为 --beta(简写 -b),接受一个参数,甚至在你没有提供任何参数的情况下指定一个默认值。

访问命令行数据

当你定义了有效的选项,你就可以使用长的选项名称来引用这些值:

program.parse();

const options = program.opts();
console.log('Options detected:');

if (options.alpha) console.log('alpha');
 
const beta = !options.beta ? 'no' : options.beta;
console.log('beta is: %s', beta);

运行应用

试着用 node 命令来运行它,首先不使用选项:

$ node ./example.js 
Options detected: 
beta is: Foo

在用户没有覆盖的情况下,beta 的默认值被使用。

再次运行它,这次使用选项:

$ node ./example.js --beta hello --alpha
Options detected: 
alpha
beta is: hello

这次,测试脚本成功检测到了选项 --alpha,以及用户提供的 --beta 选项的值。

选项解析

下面是完整的演示代码供你参考:

const { program } = require('commander');

program
  .description('A sample application to parse options')
  .option('-a, --alpha', 'Alpha')
    .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');

program.parse();

const options = program.opts();
console.log('Options detected:');

console.log(typeof options);

if (options.alpha) console.log(' * alpha');
const beta = !options.beta ? 'no' : options.beta;
console.log(' * beta is: %s', beta);

在该项目的 Git 仓库 中还有更多例子。

对任何应用来说,包括用户的选项都是一个重要的功能,而 Commander.js 使它很容易做到。除了 Commander.js,还有其他库,但我觉得这个库使用起来很方便快捷。你最喜欢的 JavaScript 命令行构建器是什么?


via: https://opensource.com/article/21/11/javascript-command-line-apps

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 argparse 模块为应用程序设置命令行选项。

 title=

有一些第三方库用于命令行解析,但标准库 argparse 与之相比也毫不逊色。

无需添加很多依赖,你就可以编写带有实用参数解析功能的漂亮命令行工具。

Python 中的参数解析

使用 argparse 解析命令行参数时,第一步是配置一个 ArgumentParser 对象。这通常在全局模块内完成,因为单单\_配置\_一个解析器没有副作用。

import argparse

PARSER = argparse.ArgumentParser()

ArgumentParser 中最重要的方法是 .add_argument(),它有几个变体。默认情况下,它会添加一个参数,并期望一个值。

PARSER.add_argument("--value")

查看实际效果,调用 .parse_args()

PARSER.parse_args(["--value", "some-value"])
Namespace(value='some-value')

也可以使用 = 语法:

PARSER.parse_args(["--value=some-value"])
Namespace(value='some-value')

为了缩短在命令行输入的命令,你还可以为选项指定一个短“别名”:

PARSER.add_argument("--thing", "-t")

可以传入短选项:

PARSER.parse_args("-t some-thing".split())
Namespace(value=None, thing='some-thing')

或者长选项:

PARSER.parse_args("--thing some-thing".split())
Namespace(value=None, thing='some-thing')

类型

有很多类型的参数可供你使用。除了默认类型,最流行的两个是布尔类型和计数器。布尔类型有一个默认为 True 的变体和一个默认为 False 的变体。

PARSER.add_argument("--active", action="store_true")
PARSER.add_argument("--no-dry-run", action="store_false", dest="dry_run")
PARSER.add_argument("--verbose", "-v", action="count")

除非显式传入 --active,否则 active 就是 Falsedry-run 默认是 True,除非传入 --no-dry-run。无值的短选项可以并列。

传递所有参数会导致非默认状态:

PARSER.parse_args("--active --no-dry-run -vvvv".split())
Namespace(value=None, thing=None, active=True, dry_run=False, verbose=4)

默认值则比较单一:

PARSER.parse_args("".split())
Namespace(value=None, thing=None, active=False, dry_run=True, verbose=None)

子命令

经典的 Unix 命令秉承了“一次只做一件事,并做到极致”,但现代的趋势把“几个密切相关的操作”放在一起。

gitpodmankubectl 充分说明了这种范式的流行。argparse 库也可以做到:

MULTI_PARSER = argparse.ArgumentParser()
subparsers = MULTI_PARSER.add_subparsers()
get = subparsers.add_parser("get")
get.add_argument("--name")
get.set_defaults(command="get")
search = subparsers.add_parser("search")
search.add_argument("--query")
search.set_defaults(command="search")
MULTI_PARSER.parse_args("get --name awesome-name".split())
Namespace(name='awesome-name', command='get')
MULTI_PARSER.parse_args("search --query name~awesome".split())
Namespace(query='name~awesome', command='search')`

程序架构

使用 argparse 的一种方法是使用下面的结构:

## my_package/__main__.py
import argparse
import sys

from my_package import toplevel

parsed_arguments = toplevel.PARSER.parse_args(sys.argv[1:])
toplevel.main(parsed_arguments)
## my_package/toplevel.py

PARSER = argparse.ArgumentParser()
## .add_argument, etc.

def main(parsed_args):

    ...

    # do stuff with parsed_args

在这种情况下,使用 python -m my_package 运行。或者,你可以在包安装时使用 console\_scprits 入口点。

总结

argparse 模块是一个强大的命令行参数解析器,还有很多功能没能在这里介绍。它能实现你想象的一切。


via: https://opensource.com/article/21/8/python-argparse

作者:Moshe Zadka 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出