我想在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 程序。
第一个解决方案:
您可以使用input
方法调用 python 程序并处理标准输入。这允许您处理任意数量的行,并在程序运行时添加内容。但是,用户必须有一种方法来指示输入已完成(包含"EOF"的行,空行等(,以便程序停止查找更多输入并开始其他进程。
$ cat prog3.py
def main():
# Retrieve input
lines = []
line = input("Enter first line or empty line to endn")
lines.append(line)
while line:
line = input("Enter next line or empty line to endn")
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
三分之奏解决方案:
如果你想使用常规的pythonsys.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