我正在尝试强制用户使用二进制输入,当用户输入\ n时,所有这些都在工作。该程序只是跳过该输入,从而在后面的列表中抛出索引错误。
payload = input("Input the binary data payload: ")
for i in str(payload):
if (i == "0" or i == "1"):
答案 0 :(得分:3)
[input]函数然后从输入中读取一行,将其转换为字符串 (剥离尾随换行符),然后返回。
所以输入函数永远不会给你\n
。你必须找到另一个读取原始字符的函数。 This question可能有用。
答案 1 :(得分:1)
Sam Mussmann的回答解释了为什么你所做的事情无效。
但是如果你想知道如何修复它...我不完全确定你的意思是“强制二进制输入”。
您如何知道输入何时完成?对于input
,只要用户点击换行符就会完成,这显然不是您想要的。
此外,input
会自动decode
用户提供的任何内容str
为您提供Unicode input
。这显然不是你想要的。
最重要的是,如果readline
可用,payload = sys.stdin.buffer.read()
会使用payload = sys.stdin.buffer.read(512)
,这将导致各种控制字符进行行编辑,而不仅仅是代表自己。
如果你想在EOF之前阅读所有内容,那很容易:
{{1}}
...但请注意,在交互式应用程序中,“直到EOF”意味着“直到用户在某些不明确记录的情况下在某一行(Unix)或^ Z上点击^ D”(Windows)“,它可能不是很有用。它适用于shell输入重定向,但你正在谈论粘贴到交互式应用程序。
如果你想读一些固定大小,比如512字节,那也很容易,并且没有任何这样的问题:
{{1}}
很难想象其他任何你可能意味着有意义的东西。例如,在空白行之前读取多行很容易,但二进制数据很容易在其中间有一个空行。或者你能想到的任何其他东西。