Python如何在输入中检测\ n

时间:2013-09-17 01:19:01

标签: python python-3.x

我正在尝试强制用户使用二进制输入,当用户输入\ n时,所有这些都在工作。该程序只是跳过该输入,从而在后面的列表中抛出索引错误。

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

2 个答案:

答案 0 :(得分:3)

来自the documentation

  

[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}}

很难想象其他任何你可能意味着有意义的东西。例如,在空白行之前读取多行很容易,但二进制数据很容易在其中间有一个空行。或者你能想到的任何其他东西。