【问题标题】:send an input file to a python code which is using getpass function将输入文件发送到使用 getpass 函数的 python 代码
【发布时间】:2020-03-26 04:37:30
【问题描述】:

假设这段代码是一个简单的 Python 代码,可以获取用户名和密码:

from getpass import getpass

user = getpass(" enter username :")
pass = getpass(" enter password ")
print("user = ", user)
print("pass = ", pass)

此外,假设我们有一个名为 input 的文件,其中包含:

我的用户名

我的密码

我想将此文件作为 bash 中 python 代码的输入发送:

但是这条指令不起作用:

python3 get_user_pass.py < input

这是因为使用了getpass函数,如果我们使用input而不是getpass,它会正常工作。我们如何将输入文件从 bash 发送到使用 getpass 的 python 代码?

【问题讨论】:

    标签: python-3.x bash input stdin getpass


    【解决方案1】:

    getpass() 读取格式 /dev/tty 并且根据定义需要交互式外壳。 它不会从标准输入(或任何文件)读取输入。

    getpass 函数用于隐藏输入回显。将文件流重定向到输入无论如何都不会显示回显。

    【讨论】:

    • 所以这意味着没有任何方法可以将输入数据从 bash 发送到 python 代码?
    • getpass 函数被构建为不从那里读取。由于文件重定向不显示终端上的内容,它实际上是“隐藏”的,这是使用 getpass 开始的唯一原因。
    • @Saeed IIRC 使用 gdb 您可以在 python 等待输入时将指向 /dev/tty 的文件描述符重定向到另一个文件。不过工作量太大了
    【解决方案2】:

    我们在执行脚本时将文件名作为参数传递。该脚本将打开传递的文件名并逐行读取内容并将内容作为列表引用。

    用户和密码文件:

    bash-3.2$ cat /Users/anku/Documents/project/config.txt
    user_xyz
    user_xyz_pass
    bash-3.2$ 
    

    Python 脚本:

    #!/usr/bin/python
    import sys
    
    file_name = str(sys.argv[1])
    print (file_name)
    
    file = open(file_name, 'r')
    content = file.read()
    paths = content.split("\n")
    user = str(paths[0])
    password = str(paths[1])
    print("user = ", user)
    print("pass = ", password)
    

    执行 Python 脚本:

    bash-3.2$ python /Users/anku/Documents/project/usr_pass.py /Users/anku/Documents/project/config.txt
    /Users/anku/Documents/project/config.txt
    user =  user_xyz
    pass =  user_xyz_pass
    bash-3.2$ 
    

    希望这会有所帮助。祝你好运!!

    【讨论】:

    • 其实这不是我想要的,我的程序需要使用getpass,不应该使用文件中的输入参数。
    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2011-06-17
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多