使用命令行应用程序

SUMO 软件包中的大多数应用程序都是命令行工具。 目前,只有 sumo-guinetedit 不是。如果您不知道什么是“命令行”,请参阅关于基本计算机技能的页面。

以下介绍 SUMO 套件应用程序的一些特性。

从命令行使用 SUMO 应用程序#

SUMO 应用程序是普通的可执行文件。您只需在命令行中键入它们的名称即可启动它们;例如,调用 netgenerate 的方式如下:

在 Windows 下:

netgenerate.exe

在 Linux 下:

netgenerate

这仅仅启动了应用程序(本例中为 netgenerate)。由于没有给出参数,应用程序不知道该做什么,只打印关于其自身的信息:

Eclipse SUMO netgenerate Version 1.25.0
 Build features: Linux-4.1.39-56-default Proj GDAL GUI
 Copyright (C) 2001-2020 German Aerospace Center (DLR) and others; https://sumo.dlr.de
 License EPL-2.0: Eclipse Public License Version 2 <https://www.eclipse.org/legal/epl-2.0/>
 Use --help to get the list of options.

选项#

每个应用程序都有一组选项,这些选项定义了应处理或生成哪些文件,或者定义了应用程序的行为。通常,应用程序至少需要两个参数——一个输入文件和一个输出文件——但几乎总是使用更多参数来进行细粒度控制。每个应用程序的选项都在其描述中进行了说明。下面介绍如何设置选项。

在命令行上设置选项#

有两种选项:不需要参数的布尔选项(如果存在该选项则设置为 true,但也接受通常的布尔值如 "true" 和 "false" 作为参数)和需要参数的选项。在命令行上设置带参数的选项由两部分组成——选项名称和选项的值。例如,如果希望模拟加载特定的路网 "mynet.net.xml",则必须写入:

--net mynet.net.xml

前面的 '--' 表示后面是选项的长名称(本例中为 "net")。在空格后必须给出选项的值。也可以使用 '=' 代替空格:

--net=mynet.net.xml

一些常用的选项可以缩写。--net 选项的缩写是 -n。以下与上述两个示例具有相同的效果:

-n mynet.net.xml

请注意,缩写使用单个 '-' 表示。

Note

并非所有缩写在 SUMO 套件的应用程序中都具有相同的含义。

如果您想将选项附加到配置文件中给出的值列表,您将使用以下语法:

+a myAdditional.add.xml

请注意,您可以在这里使用缩写或非缩写名称,但始终使用单个 '+'。这仅适用于字符串或数字列表。

选项值类型#

SUMO 应用程序知道它们期望设置的值的类型。例如,netgenerate 允许您设置默认车道数,这当然必须是整数值。如果给出了字符串或其他内容,这会被识别,应用程序会在启动时响应错误消息。请注意,浮点数中的小数点使用点 (".") 编码。

值类型的一个特例是列表,例如要加载到模拟中的附加文件列表。当给出多个文件时,文件必须用 ',' 分隔。这也适用于其他值类型的列表,如整数或浮点数。

配置文件#

因为选项列表可能变得很长,所以引入了配置文件。您可以设置一个包含所有要启动应用程序的参数的配置文件。此外,您只需提供此配置文件即可启动应用程序。

配置文件是一个 XML 文件,其根元素名为 configuration。选项被写入元素名称,所需的值存储在属性 value(或 v)中;命令行上给出的选项 --net-file test.net.xml 将在配置文件中变为 <net-file value="test.net.xml"/>。对于布尔选项,值应为 "true"、"on"、"yes"、"1" 或 "x" 表示激活,"false"、"off"、"no" 或 "0" 表示停用(此处不区分大小写)。

对于上面的示例,配置文件(假设保存为 "test.sumocfg",见下文)将如下所示:

<configuration>
    <input>
        <net-file value="test.net.xml"/>
        <route-files value="test.rou.xml"/>
        <additional-files value="test.add.xml"/>
    </input>
</configuration>

上面给出的 input 部分仅用于文档目的,没有功能意义。

一个不那么冗长但等效的版本如下:

<configuration>
    <n v="test.net.xml"/>
    <r v="test.rou.xml"/>
    <a v="test.add.xml"/>
</configuration>

相应的 sumo 执行调用——适用于两种配置版本——将是:

sumo.exe -c test.sumocfg

这意味着,我们只使用选项 --configuration-file <FILE>-c <FILE> 给出配置文件的名称,而不是参数。如果您不想在命令行上给出任何其他选项,也可以省略 "-c":

sumo.exe test.sumocfg

配置文件的命名约定#

根据目标应用程序,配置文件具有不同的扩展名。强烈建议遵循此约定。对于与 sumo-gui 一起使用的模拟配置,这甚至是必需的——sumo-gui 只能读取名为 "*.sumocfg" 的模拟配置。

所有配置扩展名的约定都可以在使用的文件扩展名页面上找到。

配置文件与命令行参数#

除了配置文件之外,还可以在命令行上给出进一步的命令行参数。如果在命名的配置文件中设置了参数,同时又在命令行上给出了,则使用命令行上给出的值(覆盖配置文件中的值),除非您使用上面描述的 '+' 语法。如果您想禁用在配置文件中启用的布尔选项,则需要在命令行上显式给出 "false" 值,如 --verbose false

生成配置文件、模板和模式#

SUMO 软件包的应用程序允许您生成配置文件模板。可以保存一个空配置——一个配置模板。这可以通过使用 --save-template <FILE> 来完成。在这种情况下,配置将仅包含填充了其默认值的参数。

也可以保存包含当前设置值的配置文件。可以使用选项 --save-configuration <FILE> 强制应用程序执行此操作。

最后但并非最不重要的是,可以生成一个 XML 模式(使用选项 --save-schema <FILE>)来验证配置文件。对于 SUMO 应用程序,此模式应等同于 https://sumo.dlr.de/xsd/sumoConfiguration.xsd 处的模式(或其他可执行文件的相应模式)。请注意,该模式比 SUMO 选项解析器更严格,因为它只验证上面给出的冗长版本。

在任何一种情况下,如果需要有关参数的更多信息,还可以传递选项 --save-commented。然后,将为每个参数生成一些进一步的注释。

Note

SUMO 应用程序将在保存配置后退出。必须再次调用该应用程序才能运行配置。

配置文件中的环境变量#

可以在配置文件中引用环境变量。引用环境变量的语法是 ${VARNAME}。 例如,您的配置文件可以引用一个名为 NETFILENAME 的变量,该变量包含网络文件的名称,配置设置如下。

<configuration>
    <input>
        <net-file value="${NETFILENAME}.net.xml"/>
    </input>
</configuration>

这里还可以使用一些特殊值,它们不是环境变量:

  • ${LOCALTIME} 指加载配置时的本地时间
  • ${UTC}${LOCALTIME} 相同,但使用世界协调时间
  • ${PID} 正在运行的应用程序的进程 id
  • ${SUMO_LOGO} 将被替换为 ${SUMO_HOME}/data/logo/sumo-128x138.png(仅在未设置时,对背景图像有用)
  • ~ 将被 ${HOME} 替换(另见下一项)
  • ${HOME} 在 Windows 上将被 ${USERPROFILE} 替换(仅在未设置时)

如果您只是编写新配置,则不会发生环境变量的扩展。

通用选项#

SUMO 套件的应用程序共享几个选项。它们在下面给出。

配置选项#

选项 描述
-c <FILE>
--configuration-file <FILE>
在启动时加载命名的配置
-C <FILE>
--save-configuration <FILE>
将当前配置保存到 FILE
--save-configuration.relative <BOOL> 保存配置时强制使用相对路径;默认值: false
--save-template <FILE> 将配置模板(空)保存到 FILE
--save-schema <FILE> 将配置模式保存到 FILE
--save-commented <BOOL> 向保存的模板、配置或模式添加注释;默认值: false

报告选项#

选项 描述
-v <BOOL>
--verbose <BOOL>
切换到详细输出;默认值: false**
--print-options <BOOL> 在处理前打印选项值;默认值: false**
-? <BOOL>
--help <BOOL>
打印此屏幕;默认值: false**
-V <BOOL>
--version <BOOL>
打印当前版本;默认值: false**
-X <STRING>
--xml-validation <STRING>
设置 XML 输入的模式验证方案("never"、"auto" 或 "always");默认值: auto**
--xml-validation.net <STRING> 设置 SUMO 网络输入的模式验证方案("never"、"auto" 或 "always");默认值: never**
-W <BOOL>
--no-warnings <BOOL>
禁用警告输出;默认值: false**
-l <FILE>
--log <FILE>
将所有消息写入 FILE(意味着详细)
--message-log <FILE> 将所有非错误消息写入 FILE(意味着详细)
--error-log <FILE> 将所有警告和错误写入 FILE
--language <STRING> 消息中使用的语言;默认值: C

日志记录选项 --log--message-log 也会启用详细输出,但仅输出到给定文件(除非也给出了 --verbose)。错误总是打印到控制台(除了可能的日志文件)。

XML 验证 选项在 XML 解析器中启用 XML 模式处理。这会执行输入的基本验证,强烈建议初学者使用,因为它可以轻松发现输入中的拼写错误,否则这些错误可能会被静默忽略。仅当 XML 模式在输入文件中声明 时才执行验证。

--language 选项设置消息、警告和 GUI 元素的语言。翻译仍然非常不完整,因此默认情况下语言设置为 "C",表示未翻译。该参数接受两个字母的语言代码,如 trde。如果显式设置为空字符串,它将尝试从环境变量确定语言,如 gettext 文档 中所述。如果您想为翻译做出贡献,请查看翻译文档

随机数选项#

这些选项配置如何确定随机数生成器的种子。相同的种子会导致相同的生成随机数序列。

默认情况下,种子是一个硬编码的固定值。因此,只要所有配置设置保持不变,重复模拟运行的输出将是相同的。要更改此设置,请使用以下选项之一。

选项 描述
--seed <INT> 为随机数生成器设置特定的种子。通过使用不同的值,您可以拥有不同但仍可重现的模拟运行。
--random 让 SUMO 选择一个种子。如果可用,种子将基于 /dev/urandom 的输出,否则种子将从当前系统时间派生。此选项优先于选项 --seed <INT>

注意--random 优先于 --seed <INT> 意味着在配置文件中设置 --random 并在命令行中用 --seed <INT> 覆盖它是不可能的。将来可能会有解决方案。

生成和读取文件#

SUMO 软件包中的工具读取或生成的几乎所有文件都是用 XML 编写的。在开始使用 SUMO 之前,您应该熟悉 XML。SUMO 允许您从不同来源导入文件,但“原生”SUMO 文件——路网描述、路线和/或需求描述、基础设施描述等——是 SUMO 特有的,不遵循任何标准。XML 文件可以使用简单的文本编辑器读写,我们通常这样做。尽管如此,也存在其他一些工具并且可以重复使用。

对于 SUMO 使用的某些文件类型,存在 xsd(XML 模式定义)。请查阅文件扩展名页面以获取已描述文件格式的列表。

使用 XML 的提示#

  • Windows 上 XML 文件的默认查看器是 Internet Explorer。它可以用来验证您的 XML 文件。如果 Internet Explorer 可以完全加载它,则 XML 文件的语法应该是有效的。
  • Eclipse 允许编写遵循给定 xsd(XML 模式定义) 的 XML 文档。

写入文件#

几个选项期望一个文件名 (<FILE>) 作为参数写入。当在命令行给出时,假定给定的路径相对于当前工作目录。当在配置文件中给出时,假定文件路径相对于配置文件的路径。当然也允许使用绝对路径。

通常,具有相同名称的现有文件会在没有警告的情况下被覆盖。输出文件要写入的目录必须存在。

除了写入文件之外,进一步的特殊表示法允许:

  • 写入空设备(无任何输出):使用 "NUL" 或 "/dev/null" 作为文件名(两种表示法都独立于平台工作)
  • 写入套接字:使用 "<HOST>:<PORT>" 作为文件名
  • 写入 stdout(在命令行打印):使用 "stdout" 或 "-" 作为文件名
  • 写入 stderr:使用 "stderr" 作为文件名
  • 文件名中的特殊字符串 'TIME' 将被应用程序启动时间替换

目前无法从套接字或 stdin 读取输入。

作为修改输出文件名的简单方法,提供了选项 --output-prefix <STRING>。给定的字符串将被预置到应用程序写入的所有文件。

Note

允许多个数据源(即检测器定义)写入同一个输出文件。

时间值#

输出#

默认情况下,sumo 写入的所有时间值都是以秒为单位。所有应用程序和一些 python 工具都支持选项 --human-readable-time(缩写 -H),这会导致输出中的时间写入为 "HH:MM:SS"(小时、分钟、秒)。亚秒时间将写入为 "HH:MM:SS.SS"。如果写入的时间超过 24 小时,将写入为 "DD:HH:MM:SS",其中 DD 是天数。

设置选项 --human-readable-time 还会影响 sumo-gui 对话框中某些时间值的格式化方式(例如断点)。

输入#

选项和 XML 输入中的所有时间值始终可以以秒或 "HH:MM:SS" 或 "DD:HH:MM:SS" 格式给出。

从命令行使用 Python 工具#

许多由 SUMO 分发的工具(在 <SUMO_HOME>/tools 文件夹中)是用 python 编程语言编写的。要使用它们,必须在您的计算机上安装 Python 3.7 或更高版本

然后您需要确保设置了环境变量 SUMO_HOME。最简单的方法是使用 start-command-line.bat 打开命令行窗口。

此外,您需要确保您的计算机知道在哪里可以找到 python 工具。最简单(但有些麻烦)的方法是使用其完整路径运行该工具:

C:\Users\yourname>D:\path_to_sumo\tools\randomTrips.py  ... arguments ...

或者,您可以将工具所在的目录添加到您的 PATH 变量中。