使用 sys.stdin.readline() 从 Python 中的 cmd 读取多行

Using sys.stdin.readline() to read multiple lines from cmd in Python

我想在 运行

之后从命令行输入我的输入
if __name__ == "__main__":
    data = list(map(int, sys.stdin.readline().split()))
    print(data)
    n, capacity = data[0:2]
    values = data[2:(2 * n + 2):2]
    weights = data[3:(2 * n + 2):2]

示例输入可以是:

2 40
20 2
30 3

我的问题是:
1) 如何使用我的输入创建列表数据?
2) 我怎样才能让 Python 知道我已经完成输入并且它应该执行其余的代码?

此问题的解决方案取决于您使用的OS。
基本上,如果你想要多行输入,你必须使用 sys.stdin.read() 而不是 sys.stdin.readline()。由于 sys.stdin 是 Python 中的类文件对象,因此 read() 方法将一直读取到文件末尾。它由特殊字符 EOF(文件结尾)标记。在不同的 OS 上有不同的发送方式。

在Windows:
输入后按Ctrl+Z然后按Enter:

2 10
20 2
30 3
^Z

基于 Unix OS:
输入后按Ctrl+D。不需要输入(我相信)

如果您想从输入中获取列表 [2, 10, 20, 2, 30, 3],没问题。 split() 方法按空格(空格、换行符等)拆分。

我同意@Leva7 所说的一切。尽管如此,我建议另一种解决方案,即对 Python 2 使用 raw_input 或对 Python 3 使用 input ,如下所示:

args = []
s = raw_input()                # input() for Python 3
while s != '':
    args.extend([int(arg) for arg in s.strip().split()])
    s = raw_input()

当然,这在任何方面都不是单行的,但它完成了工作,而且很容易看出它是如何完成的。另外,输入末尾不需要特殊字符。

如果您在 Windows 上,请确保您使用换行符完成输入,否则 ^Z(通过按 Ctrl-Z)将包含在您的输入中。 还要确保您使用英语布局 -