簡體   English   中英

在python中使用sys.stdin.readline()從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知道我已經完成了輸入,它應該執行其余的代碼?

該問題的解決方案取決於您使用的操作系統。
基本上,如果要多行輸入,則必須使用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 無需輸入 (我相信)

如果您想從輸入中獲取列表[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)將包含在輸入中。 還要確保您使用英語語言布局-https: //stackoverflow.com/a/17924627/9205085

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM