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

时间:2016-04-22 16:19:25

标签: python stdin

我想在运行

后从命令行输入我的输入
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知道我已完成输入并且应该执行剩下的代码?

3 个答案:

答案 0 :(得分:1)

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

在Windows上
输入后按 Ctrl + Z ,然后按 Enter

2 10
20 2
30 3
^Z

在基于Unix的操作系统
输入后按 Ctrl + D 。不需要 Enter (我相信)

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

答案 1 :(得分:0)

我同意@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()

当然,这不是任何方式的单行,但它完成了工作并且很容易看出它是如何完成的。另外,输入结束时不需要特殊字符。

答案 2 :(得分:0)

如果您使用Windows,请确保以换行符结束输入,否则^ Z(按Ctrl-Z)将包含在输入中。 另外,请确保您使用英语语言布局-https://stackoverflow.com/a/17924627/9205085