威尼斯人线上娱乐

Python中getpass模块无回显输入源码剖析,求高手解救啊

16 6月 , 2019  

正文首要切磋了python中getpass模块的有关内容,具体如下。

Python中getpass模块无回显输入源码分析,pythongetpass

正文重要斟酌了python中getpass模块的连锁内容,具体如下。

getpass模块

Python中getpass模块无回显输入源码剖析,求高手解救啊。后天跟学弟吹牛b安利Python标准库官方文书档案的时候不经常开采了那么些模块。仔细一看内容挺少的,只有四个首要api,就花了点时间读书了眨眼之间间源码,以为挺实用的,在那安利给大家。

getpass.getpass(prompt=’Password: ‘, stream=None)

调用该函数能够在命令行窗口里面无回显输入密码。参数prompt代表提示字符串,私下认可是’Password:
‘。在Unix系统中,stream默觉伏贴下调整的极端。在Windows系统里stream参数会被忽视掉,私下认可使用stdin。即便无法符合规律使用getpass,会打印错误信息,然后模块会接纳有回显的方式读取数据。

>>> import getpass
>>> passwd = getpass.getpass()
Password:
>>> print(passwd)
ganziqim

getpass.getuser()

回到当前用户名。这几个函数会按顺序检查蒙受变量LOGNAME, USE宝马7系,
LNAME和USE中华VNAME。再次来到第二个非空的值。假如检查不到非空的值,模块会尝试导入pwd模块,要是系统支持pwd模块,会回到经过pwd模块获取的用户名,不然报错。

>>> getpass.getuser()
'ganzi'

部分细节

1.getpass模块内部其实完毕了unix_getpass、win_getpass和fallback_getpass三个函数。在模块被导入之后会率先对用户采纳的种类开始展览检查,将相应的函数赋值给getpass。假使检查失利,则将fallback_getpass赋值给getpass。

2.win_getpass使用msvcrt.getwch()获取无回显输入。

3.fallback_getpass不止在一始发反省类别的时候被调用,当其它七个函数现身错误的时候也会调用它。而调用了fallback_getpass又会先打字与印刷错误消息,然后再调用模块内部的_raw_input函数进行有回显的输入读取。

以此是写在模块底部的种类检查代码:

try:
  import termios
  termios.tcgetattr, termios.tcsetattr
except (ImportError, AttributeError):
  try:
    import msvcrt
  except ImportError:
    getpass = fallback_getpass
  else:
    getpass = win_getpass
else:
  getpass = unix_getpass

总结:getpass模块只有不到200行代码(包蕴注释和模块文档),getuser的入眼代码更是唯有短短7行,内部贯彻特别简单。但模块内部有大多管理万分意况的代码,好些个细节无法在博客里面进行细说,说了体现啰嗦,不疑似笔记。所以建议风趣味的读者花点时间阅读一下源码,能对模块的内部原因有更丰盛的知道。

以上正是本文关于Python中getpass模块无回显输入源码剖析的全体内容,希望对大家有着支持。感兴趣的爱人能够再三再四参照本站别的相关专项论题,如有不足之处,招待留言提出。谢谢朋友们对本站的支撑!

本文首要探讨了python中getpass模块的有关内容,具体如下。 getpass模块
后日跟学弟吹嘘b安…

求高手解救啊!pycharm下getpass.getpass()卡住不运行是怎么难点
率先注明 上面这几行代码在命令行和eclipse下都能符合规律运作

初写Python,写Python

#!/usr/bin/env python (内定用什么解释器运维脚本以及解释器所在的岗位)
# -*- coding:utf-8 -*- (用来钦命文件编码为utf-8的)   #
无效的剧情,只做注脚用(单行注释)   “”” aidfjoi sjfijw of
“””(多行注释)     【用户名密码小程序】

i1 = raw_input("请输入用户名:")  #raw_input用于和用户交互,等待用户输入内容 (本人使用的是python 3.5.2版本,在执行该程序时raw_input()会报错,但改成input()就可以正常运行了,大概只有python 2.7版本才支持这种写法了吧)
i2 = raw_input("请输入密码:")
print(i1)
print(i2)

 

  • getpass模块提供了可移植的密码输入,一共包含上面多个函数:

  1. getpass.getpass()

  2. getpass.getuser()

 getpass.getpass([prompt[,
stream]]) 

  提醒用户输入一段密码,参数 prompt 用于提示用户起初输入,默感觉’Password:
‘。在 Unix 上,该提示符被写入到类公事对象流中。参数 stream
默感觉调控终端 (/dev/tty) 或入过前者不可用时为 sys.stderr (该参数在
Windows 上无效)。

  借使无回显输入不可用,getpass()
回退并向流 stream 中输出七个警示消息,从 sys.stdin
中读取并抛出特别 GetPassWarning

  适用于: Macintosh, Unix, Windows.

  *注:

  倘诺您在 IDLE 中调用getpass(),输入可能会在你运行 IDLE
的终极中而不是在 IDLE 窗口中做到

improt getpass
pwd = getpass.getpass("请输入密码:")  #用户输入密码不可见

 

   【用户名密码小程序立异】

import getpass
i1 = raw_input("UserName:")
i2 = getpass.getpass("PassWord:")#密码不可见
print(i1)
print(i2)

 

#!/usr/bin/env python
(钦点用什么样解释器运营脚本以及解释器所在的职位) # -*- coding:utf-8 -*-
(用来钦定文件编码为utf-8的) #…

getpass模块

import getpass
print “nihao1”
d = getpass.getpass()
print “nihao2”
print “d=”, d
运维程序只是打字与印刷nihao1,然后能够不停的输入,正是不一连往下运作了,程序平素卡在这里,作者是windows系统

明日跟学弟吹捧b安利Python标准库官方文书档案的时候偶尔开掘了那个模块。仔细一看内容挺少的,只有几个十分重要api,就花了点时间读书了一下源码,认为挺实用的,在那安利给我们。

接下来自个儿查看getpass模块的源码,开采getpass.getpass()的调用的是getpass.win_getpass(),
在那么些主意中有一行c=msvcrt,getch().程序便是卡在此地不动了。
自家能找到的题目就到那了,,接下去也不驾驭该怎么消除 ,求大神啊!!!

getpass.getpass(prompt=’Password: ‘, stream=None)

PS:
刚才又探究了瞬间源码,win_getpass()方法源码:里面包车型地铁print语句是自个儿要好调的时候增进的。
def win_getpass(prompt=’Password: ‘, stream=None):
“””Prompt for password with echo off, using Windows getch().”””
print “hahaha i am in “
if sys.stdin is not sys.__stdin__:
print “if sys.stdin is not sys.__stdin__:”
return fallback_getpass(prompt, stream)
import msvcrt
print “import msvcrt”
for c in prompt:
print “for c in prompt:”,c
msvcrt.putch
pw = “”
while 1:
print “while 1:”
c = msvcrt.getch()
print “is here “
print c
if c == ‘\r’ or c == ‘\n’:
print “if c == ‘\r’ or c == ‘\n’:”
break
if c == ‘\003’:
print “if c == ‘\003’:”
raise KeyboardInterrupt
if c == ‘\b’:
print “if c == ‘\b’:”
pw = pw[:-1]
else:
print “else:”
pw = pw + c
msvcrt.putch
msvcrt.putch
print “pw:”, pw
return pw

调用该函数能够在命令行窗口里面无回显输入密码。参数prompt代表提醒字符串,暗中认可是’Password:
‘。在Unix系统中,stream默以为如今决定的顶点。在Windows系统里stream参数会被忽略掉,暗中同意使用stdin。要是不可能符合规律使用getpass,会打字与印刷错误新闻,然后模块会选用有回显的格局读取数据。

第四行有一句 if sys.stdin is not sys.__stdin__:
在windows下
pycharm中,运维源码时这一句重临的是false,所以程序跳过if语句继续往下举行了,这就进入了while
1:循环,
然后就卡在了刚开头说的c=msvcrt.getch()这里了。作者把地点的不行if语句改了一晃,把is
not 改成 is了,竟然可以运作了。只是多了这么几行输出:
D:\Python27\lib\getpass.py:94: GetPassWarning: Can not control echo
on the terminal.
return fallback_getpass(prompt, stream)
Warning: Password input may be echoed.

>>> import getpass
>>> passwd = getpass.getpass()
Password:
>>> print(passwd)
ganziqim

自己不得不做到那么些水平了,至于为何会是那样,为何那叁个If语句在起效果,那和pycharm有如何关系,作者都不明白了,所以求大神指导啊,说一下道理,在那之中的原理是怎么样,应该怎么弄能力在pycharm中不荒谬运营,因为源码在命令行和eclipse中都以平常的。
谢谢啦!!

getpass.getuser()

归来当前用户名。这些函数会按梯次检查情况变量LOGNAME, USESportage,
LNAME和USE帕杰罗NAME。再次回到第三个非空的值。借使检查不到非空的值,模块会尝试导入pwd模块,借使系统帮衬pwd模块,会回去经过pwd模块获取的用户名,不然报错。

>>> getpass.getuser()
'ganzi'

局地细节

1.getpass模块内部其实实现了unix_getpass、win_getpass和fallback_getpass四个函数。在模块被导入之后会首先对用户使用的系统实行检查,将相应的函数赋值给getpass。假如检查失利,则将fallback_getpass赋值给getpass。

2.win_getpass使用msvcrt.getwch()获取无回显输入。

3.fallback_getpass不唯有在一初始检查类别的时候被调用,当此外五个函数出现错误的时候也会调用它。而调用了fallback_getpass又会先打字与印刷错误音信,然后再调用模块内部的_raw_input函数进行有回显的输入读取。

威尼斯人线上娱乐 ,以此是写在模块底部的系统一检查查代码:

try:
  import termios
  termios.tcgetattr, termios.tcsetattr
except (ImportError, AttributeError):
  try:
    import msvcrt
  except ImportError:
    getpass = fallback_getpass
  else:
    getpass = win_getpass
else:
  getpass = unix_getpass

总结:getpass模块惟有不到200行代码(包蕴注释和模块文书档案),getuser的严重性代码更是只有短短7行,内部贯彻特别轻便。但模块内部有过多甩卖十分景况的代码,繁多细节不可能在博客里面举行细说,说了体现啰嗦,不疑似笔记。所以提议风乐趣的读者花点时间读书一下源码,能对模块的细节有更充裕的知道。

上述就是本文关于Python中getpass模块无回显输入源码深入分析的全体内容,希望对我们有所帮助。感兴趣的仇人能够承袭参照本站别的连锁专题,如有不足之处,应接留言提议。谢谢朋友们对本站的支撑!

您恐怕感兴趣的篇章:

  • Python基础之getpass模块详细介绍
  • Python用sndhdr模块识别音频格式详解
  • Python用imghdr模块识别图片格式实例解析
  • Python使用base64模块实行二进制数据编码详解
  • 简来讲之理解python模块概念
  • Python编制程序pygame模块完毕活动的小车示例代码
  • python的numpy模块安装不成事轻易化解方法总括
  • python
    Crypto模块的装置与应用办法
  • Python内置模块turtle绘图详解


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图