[英]What does sys.stdin read?
我了解如何打開文件,然后將 Python 的預內置函數與它們一起使用。 但是 sys.stdin 是如何工作的呢?
for something in sys.stdin:
some stuff here
lines = sys.stdin.readlines()
sys.stdin 上面兩種不同的用法有什么區別? 它從哪里讀取信息? 是通過鍵盤,還是我們還需要提供文件?
因此,您使用了Python的“內置函數”,大概是這樣的:
file_object = open('filename')
for something in file_object:
some stuff here
這是通過在文件對象上調用迭代器來讀取文件的,而該迭代器恰巧從文件返回下一行。
您可以改用:
file_object = open('filename')
lines = file_object.readlines()
它將行從當前文件位置讀取到列表中。
現在, sys.stdin
只是另一個文件對象,恰好在程序啟動之前由Python打開。 您可以根據自己的意願來處理該文件對象,但這與任何其他文件對象並沒有什么不同,只是您不需要open
。
for something in sys.stdin:
some stuff here
將遍歷標准輸入,直到到達文件末尾。 這樣:
lines = sys.stdin.readlines()
您的第一個問題實際上是關於使用文件對象的不同方式的。
其次,它從哪里讀取? 它正在從文件描述符0(零)讀取。 在Windows上,它是文件句柄0(零)。 默認情況下,文件描述符/句柄0連接到控制台或tty,因此實際上是從鍵盤讀取的。 但是,可以使用以下語法通過外殼程序(例如bash或cmd.exe)將其重定向 :
myprog.py < input_file.txt
這會將文件描述符零更改為讀取文件而不是鍵盤。 在UNIX或Linux上,它使用基礎調用dup2()
。 閱讀您的shell文檔以獲取有關重定向的更多信息(或者如果勇敢的話,也許是man dup2
)。
它是從標准輸入中讀取的-應該由鍵盤以流數據的形式提供。
不需要提供文件,但是您可以使用重定向將文件用作標准輸入。
在Python中, readlines()
方法讀取整個流 ,然后將其拆分為換行符,並創建每行的列表。
lines = sys.stdin.readlines()
上面創建了一個名為lines的列表,其中每個元素都是一行(由行末字符確定)。
您可以在Python教程的輸入和輸出部分中了解更多相關信息。
如果要提示用戶輸入,請使用input()
方法( 在Python 2中,請使用raw_input()
):
user_input = input('Please enter something: ')
print('You entered: {}'.format(user_input))
要了解sys.stdin的工作方式,請執行以下操作:
創建一個簡單的python腳本,將其命名為“ readStdin.py”:
import sys
lines = sys.stdin.readlines()
print (lines)
現在打開控制台,輸入任何類型:
echo "line1 line2 line3" | python readStdin.py
腳本輸出:
['"line1 line2 line3" \n']
因此,腳本已將輸入讀入列表(稱為“行”),包括由“ echo”產生的換行符。 那是。
for something in sys.stdin:
some stuff here
上面的代碼無法正常運行,因為sys.stdin
是文件句柄-它是stdin
的文件句柄。 它不會達到some stuff here
lines = sys.stdin.readlines()
當以上腳本在交互式外殼中運行時,它將阻止執行,直到用戶按下Ctrl-D(表示輸入結束)為止。
據我說,sys.stdin.read()方法從用戶接受一行作為輸入,直到一個特殊字符(如Enter鍵),然后按Ctrl + D,然后將輸入存儲為字符串。
Control + D用作停止信號。
例:
import sys
input = sys.stdin.read()
print(input)
tokens = input.split()
a = int(tokens[0])
b = int(tokens[1])
print(a + b)
運行程序后,輸入兩個以空格分隔的數字,並在按Control + D一次或兩次后,將顯示兩個輸入的總和。
它將逐行讀取源文件。 它廣泛用於在線裁判系統。
例如:假設我們只有一個數字2
將在文件中使用。
import sys
if __name__ == "__main__":
n = int(sys.stdin.readline().strip())
逐行讀取文件意味着讀取數字2
(在這種情況下只讀取一行)。 使用條刪除不需要的空格或其他指定的字符。 這將導致 n = (integer) 2
。
如果我們有一個包含兩行的文件,例如:
1
2
然后, sys.stdin.readline().strip()
將其轉換為一行(一個名為n
的列表),其中包含兩個元素1
、 2
。 那么我們現在不能使用int
轉換器,但我們可以使用int(n[0])
和int(n[1])
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.