繁体   English   中英

多行用户输入 Python3

[英]Mulit-Line User Input Python3

我想在 python 中有一个用户输入,这不仅仅是一行。 此外,我不知道会有多少行。 例子:

第 1 行...

2号线...

第 3 行...

我已经尝试过这个:

lines = []
try:
    while True:
        line = input()
        if line:
            line = line.split(" ")
            lines.append(line)
        else:
            break
except EOFError:
    pass

问题是,当我有一个空行时,它就不再工作了。

用户完成的指标就是问题所在。 我希望将文本作为用户输入粘贴,然后它应该停止。

感谢您的回复!

你可以尝试这样的事情:

lines = []
while True:
    inp = input()
    if inp:
        lines.append(inp)
    else:
        break

您有多种解决方案可以将多行作为参数传递给您的 Python 程序。

第一个解决方案:

您可以调用 python 程序并使用input法处理标准输入。 这允许您处理任意数量的行,并在程序运行时添加内容。 但是,用户必须有一种方法来指示输入已完成(包含“EOF”的行、空行等),以便程序停止寻找更多输入并开始其他进程。

$ cat prog3.py
def main():
    # Retrieve input
    lines = []
    line = input("Enter first line or empty line to end\n")
    lines.append(line)
    while line:                                                                                                     
        line = input("Enter next line or empty line to end\n")
        lines.append(line)

    # Process input lines
    for l in lines:
        print(l)

    # Process input lines
    for l in lines:
        print(l)

if __name__ == "__main__":
    main()

$ python prog.py
Enter first line or empty line to end
line1 # Written by user
Enter next line or empty line to end
line2 # Written by user
Enter next line or empty line to end
line3 # Written by user
Enter next line or empty line to end

line1
line2
line3

第二种解决方案:

您可以将所有行转储到一个文件中,将该文件作为参数传递给您的 Python 程序并分别处理文件的每一行。 请注意,此方法还需要在调用 python 程序之前知道行数及其内容。

$ cat prog2.py
def main():
    import sys
    file_name = str(sys.argv[1])
    with open(file_name, 'r') as f:
        for l in f:
            print(l)

if __name__ == "__main__":
    main()

$ cat 1.in
line1
line2
line3

$ python prog.py "1.in"
line1
line2
line3

第三种解决方案:

如果你想使用常规的 python sys.argv ,你需要将所有行包装成一个字符串,在行之间添加一个分隔符,并将它们作为单个参数传递给你的 python 程序。 然后,在python程序中,需要将字符串解析成多行,逐行进行。

这对我来说有点作弊,但在某些用例中可能会有用。

请注意,此方法要求您在调用 python 程序之前知道行数及其内容。

$ cat prog1.py
def main():
    import sys
    lines = sys.argv[1].split("|")
    for l in lines:
        print(l)

if __name__ == "__main__":
    main()

$ python prog.py "line1|line2|line3"
line1
line2
line3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM