带有 bash 中变量的 read-while 循环——等同于 Python?

read-while loop with variables in bash -- equivalent in Python?

目前正在重构一些旧代码并希望将一些 bash 脚本转换为 python。

我们有一小部分功能是用 bash 编写的,类似于:

var1=
var2=
var3=

    while read var1 var2 var3; do
       logic

老实说,我不确定我是否理解它在做什么。我以前在文件的上下文中看到过 while read 循环,但我不确定这 3 个变量而不是文件在这里发生了什么。

我想首先了解 while read 到底在做什么,但是我无法在网上找到很多资源来解释变量上下文中的这种逻辑,我所看到的只是 while read 循环正在迭代实际文件。

最后,我希望将此功能转换为 python。对类似 Python 功能的任何建议将不胜感激(对 python 来说也是新的)但希望如果我能首先掌握上面的逻辑,我应该能够自己找到一些东西。

如果需要,可以在 while 循环中提供更多关于逻辑的上下文:)

如有任何帮助,我们将不胜感激

bash脚本从标准输入中读取每一行,将其拆分成单词,并将单词分配给var1var2, and var3in order. It loops untilread`returns 错误,通常发生在 EOF。

大致等效的 python 代码为:

while True:
    try:
        var1, var2, var3 = input().split(maxsplit=2)
    except EOFError:
        break
    # logic

maxsplit=2 将使 split() return 最多 3 个值。如果输入的单词超过 3 个,则所有剩余的单词将包含在最后一个单词中。这类似于当输入词多于变量时 read 的工作方式。

如果输入的单词少于 3 个,Python 版本将无法使用。 bash会给剩余的变量赋一个空字符串,Python会报错。如有必要,可以通过重新编码来解决此问题。