[英]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.