0

我正在尝试对用户强制进行二进制输入,并且当用户输入 \n 时,一切正常。该程序只是跳过该输入,从而在后面的列表中抛出一个超出索引的错误。

    payload = input("Input the binary data payload: ") 
for i in str(payload):
        if (i == "0" or i == "1"):
4

2 回答 2

3

文档中

然后 [input] 函数从输入中读取一行,将其转换为字符串(去除尾随换行符),然后返回。

所以输入功能永远不会给你\n。您必须找到另一个读取原始字符的函数。 这个问题可能有用。

于 2013-09-17T01:26:12.787 回答
1

Sam Mussmann 的回答解释了为什么你正在做的事情不起作用。

但是,如果您想知道如何解决它……我不完全确定您所说的“强制二进制输入”是什么意思。

你怎么知道输入何时完成?因为input,一旦用户点击换行符,它就完成了,所以这显然不是你想要的。

此外,input自动decodes 用户给它的任何东西给你一个 Unicode str。这显然不是你想要的。

最重要的是,如果可用,input将使用readline它,这将导致各种控制字符进行行编辑,而不仅仅是代表自己。


例如,如果您想在 EOF 之前阅读所有内容,这很容易:

payload = sys.stdin.buffer.read()

…但请注意,在交互式应用程序中,“直到 EOF”表示“直到用户在一行中单独点击 ^D (Unix) 或在某些未明确记录的情况下点击 ^Z”(Windows)”,这可能不是非常有用。它非常适用于 shell 输入重定向,但您正在谈论粘贴到交互式应用程序中。

如果你想读取一些固定的大小,比如 512 字节,那也很容易,并且没有任何这样的问题:

payload = sys.stdin.buffer.read(512)

很难想象还有什么你能说得通的。例如,很容易读取多行直到一个空行,但二进制数据很容易在中间有一个空行。或者你能想到的任何其他东西。

于 2013-09-17T01:33:42.567 回答