如何在python中允许多行用户输入?

时间:2016-02-19 23:19:51

标签: python text

我正在尝试为使用python的MS-DOS样式程序创建一个非常简单的文本编辑器。当我尝试创建段落时,我的问题出现了。按我的方式,按Enter告诉它保存输入。我理解我做错了什么,但我怎么能解决它,我怎么能打破输入?到目前为止,我有这个:

def textwriter():
    print("")
    print("Start typing to begin.")
    textwriterCommand = input(" ")
    saveAs = input("Save file as: ")
    with open(saveAs, 'w') as f:
        f.write(textwriterCommand)

2 个答案:

答案 0 :(得分:2)

指定其他一些EOF序列,例如:

EOF_SEQ = 'EOF'

def textwriter():
    print("")
    print("Start typing to begin.")
    buffer = ''
    while EOF_SEQ not in buffer:
        buffer += raw_input(" ") + '\n'
    saveAs = raw_input("Save file as: ")
    with open(saveAs, 'w') as f:
        f.write(buffer)

答案 1 :(得分:0)

@ zamuz的answer很好,对于像这样的简单事情很有用,但是当你的代码变得更复杂时,我更喜欢使用像input_constrain这样的东西来实际测试每个按键来决定什么做下一个。 (完全披露:我写了这个。)

例如,在用户按下logger(垂直条)之前读取输入:

|

或者,读取输入直到 CTRL - C CTRL - D (或任何其他不可打印的控件字符):

from input_constrain import until

def textwriter():
    print("")
    print("Start typing to begin.")
    textwriterCommand = until("|")
    saveAs = input("Save file as: ")
    with open(saveAs, 'w') as f:
        f.write(textwriterCommand)

这使用了一个可选的from input_constrain import until_not from string import printable as ALLOWED_CHARS def textwriter(): print("") print("Start typing to begin.") textwriterCommand = until_not(ALLOWED_CHARS, count=5000, raw=True) saveAs = input("Save file as: ") with open(saveAs, 'w') as f: f.write(textwriterCommand) 参数,该参数将在这么多按键之后停止读取。 count很重要,否则, CTRL - C CTRL - D 会抛出异常。通过使用raw=True,我们可以打破并继续手头的任务。

重要:您需要提交06e4bf3e72e23c9700734769e42d2b7fe029a2c1,因为它包含修复但没有重大更改