我正在尝试对用户强制进行二进制输入,并且当用户输入 \n 时,一切正常。该程序只是跳过该输入,从而在后面的列表中抛出一个超出索引的错误。
payload = input("Input the binary data payload: ")
for i in str(payload):
if (i == "0" or i == "1"):
我正在尝试对用户强制进行二进制输入,并且当用户输入 \n 时,一切正常。该程序只是跳过该输入,从而在后面的列表中抛出一个超出索引的错误。
payload = input("Input the binary data payload: ")
for i in str(payload):
if (i == "0" or i == "1"):
Sam Mussmann 的回答解释了为什么你正在做的事情不起作用。
但是,如果您想知道如何解决它……我不完全确定您所说的“强制二进制输入”是什么意思。
你怎么知道输入何时完成?因为input
,一旦用户点击换行符,它就完成了,所以这显然不是你想要的。
此外,input
自动decode
s 用户给它的任何东西给你一个 Unicode str
。这显然不是你想要的。
最重要的是,如果可用,input
将使用readline
它,这将导致各种控制字符进行行编辑,而不仅仅是代表自己。
例如,如果您想在 EOF 之前阅读所有内容,这很容易:
payload = sys.stdin.buffer.read()
…但请注意,在交互式应用程序中,“直到 EOF”表示“直到用户在一行中单独点击 ^D (Unix) 或在某些未明确记录的情况下点击 ^Z”(Windows)”,这可能不是非常有用。它非常适用于 shell 输入重定向,但您正在谈论粘贴到交互式应用程序中。
如果你想读取一些固定的大小,比如 512 字节,那也很容易,并且没有任何这样的问题:
payload = sys.stdin.buffer.read(512)
很难想象还有什么你能说得通的。例如,很容易读取多行直到一个空行,但二进制数据很容易在中间有一个空行。或者你能想到的任何其他东西。