【问题标题】:Using sys.stdin.readline() to read multiple lines from cmd in Python在 Python 中使用 sys.stdin.readline() 从 cmd 读取多行
【发布时间】:2016-08-16 09:04:38
【问题描述】:

我想在运行后从命令行输入我的输入

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 知道我已经完成了输入,它应该执行其余的代码?

【问题讨论】:

    标签: python stdin


    【解决方案1】:

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

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

    2 10
    20 2
    30 3
    ^Z
    

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

    如果你想从你的输入中得到一个列表[2, 10, 20, 2, 30, 3],你很好。 split() 方法按空格(空格、换行符等)分割。

    【讨论】:

    • 感谢@Leva7,ctrl + D 有效。我得到了我想要的结果!
    【解决方案2】:

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

    当然,这绝不是一条线,但它可以完成工作,而且很容易看出它是如何完成的。另外,输入末尾不需要特殊字符。

    【讨论】:

      【解决方案3】:

      如果您使用的是 Windows,请确保使用换行符完成输入,否则 ^Z(通过按 Ctrl-Z)将包含在您的输入中。 还要确保你使用英语布局 - https://stackoverflow.com/a/17924627/9205085

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        • 1970-01-01
        • 2017-06-16
        • 2012-09-14
        相关资源
        最近更新 更多