Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用sys.stdin.readline()从cmd读取多行_Python_Stdin - Fatal编程技术网

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

在Python中使用sys.stdin.readline()从cmd读取多行,python,stdin,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) 如

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

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

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

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

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


如果您想从您的输入中获取列表
[2,10,20,2,30,3]
,您就可以了。
split()。尽管如此,我还是建议另一种解决方案,即对Python2使用
raw_input
,或对Python3使用
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键)将包含在输入中。
还要确保使用英语布局-

谢谢@Leva7,ctrl+D可以工作。我得到了我想要的结果!
args = []
s = raw_input()                # input() for Python 3
while s != '':
    args.extend([int(arg) for arg in s.strip().split()])
    s = raw_input()