簡體   English   中英

sys.stdin 讀什么?

[英]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的列表),其中包含兩個元素12 那么我們現在不能使用int轉換器,但我們可以使用int(n[0])int(n[1])代替。

暫無
暫無

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

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