Python(Pycharm)input输入多行文本踩坑

       之前写了个小脚本,在控制台一次性输入多行文本,用input()接收,再用split('\n')分割存入列表,在开发环境下运行正常,在用户机器上无法正常运行,只能接受到第一行文本。

一次性输入的多行文本指的是类似图中这样的,直接复制粘贴进控制台:

Python(Pycharm)input输入多行文本踩坑_第1张图片

经过排查发现如下坑点:

  1. 在Pycharm的run控制台中用input()无法接收完整的'a\nb\nc',只能接收到第一个a,即读到第一个\n就自动结束输入了,无法正确接收换行。
  2. 在Python Console中则可以正常接收一次性输入的多行文本,再用一次回车结束输入。
  3. 用sys.stdin.read()则可以实现在Pycharm的Run控制台中接收完整的多行文本(本质是能接受换行\n)。

       由于我的开发环境配置了Anaconda,Pycharm自动套用了“Run with Python Console”的运行配置,而Pycharm默认的项目构建方式是Virtualenv,默认用的是Pycharm内建控制台Run,所以一直没有发现这个小问题。

切换Run控制台和Python Console的方法:

右键点击标签:

Python(Pycharm)input输入多行文本踩坑_第2张图片

在Execution中的Run with Python Console:

Python(Pycharm)input输入多行文本踩坑_第3张图片

最后话不多说,上测试代码:

import sys

list1 = []
s1: str
list2 = []
s2: str


# 同时输入多行(复制粘贴进去):
# a
# b
# c
# 在pycharm的run控制台中用input无法接收完整的'a\nb\nc' 只能接收到第一个a 即读到第一个\n就自动结束了 无法正确接收换行
# 在python console中则可以正常接收一次性输入的多行文本 再用一次回车结束输入
def inputUrls():
    global list1, s1
    s1 = input()
    list1 = s1.split('\n')


# 用sys.stdin.read()则可以实现在pycharm的run控制台中接收完整的多行文本(本质是能接受换行\n)
# 需要用Ctrl+D结束输入
def inputSys():
    global list2, s2
    s2 = sys.stdin.read()
    list2 = s2.split('\n')


# 开关 想用哪个用哪个
if 1 == 0:
    inputUrls()
    print(s1)
    print(list1)
if 1 == 0:
    inputSys()
    print(s2)
    print(list2)

你可能感兴趣的:(踩坑记录,python,字符串,编程语言,ide,pycharm)