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

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

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

经过排查发现如下坑点:

  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的方法:

右键点击标签:

在Execution中的Run with Python Console:

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

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)

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值