- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试制作一个由多个模块组成的脚本,这些脚本需要 su/sudo,但我不想让用户每次都输入他们的密码,我只想询问一次并完成它。 (我也不想以明文形式存储密码,因为它旨在用于具有不同用户/密码的不同机器)
好的,这就是我到目前为止所做的,但我不断收到错误。我不确定它是否正确,我是 python 的新手。
在我的文件 main.py 中:
import getpass
import subprocess
suStart = getpass.getpass("please enter your password")
suPass = suStart
subprocess.Popen(['python', 'test.py'])
在 test.py 中:
from manager import suPass
print suPass
当 main 调用 test 时,它尝试再次运行 getpass,我得到 IOError Errno 5。
我想我需要的是如何将 suStart 保存为它自己的字符串?我认为使用 suPass 可以做到这一点,但事实并非如此。
谢谢!
最佳答案
suPass
没有定义在test.py
的范围内,只有main.py
。为了让 test.py
知道变量 suPass
你需要在初始化子进程时将它作为参数传入,因此,将它与 args 一起传入并更改 test.py
以反射(reflect)这一点:
from sys import argv
suPass = argv[1] # we use the second index of argv, as the first index
# is actually the name of the script, test.py
print suPass
现在,在您的子进程调用中,将 suPass
添加到您的参数中:
subprocess.Popen(['python', 'test.py', suPass])
现在,如果您想以某种方式安全地存储此密码,您可以使用 hashlib
、binascii
和 os.urandom
生成一个密码哈希:
import hashlib
import binascii
from os import urandom
import getpass
salt = os.urandom(64) # where 64 can be any number of bytes, this is just
# a random bytes object for making the hash more secure
# make sure to keep it when checking a user's password input
# or the generated hash will not match!
# get a new password, and convert it to the bytes type to make it easier later
new_password = bytes(getpass.getpass('Enter a password: '), encoding='UTF-8')
# this code generates a bytes object using hashlib.pbkdf2_hmac and
# converts it to hexadecimal format with binascii.hexlify
new_hash = binascii.hexlify(hashlib.pbkdf2_hmac('sha512', new_password, salt, 100000)
print(new_hash)
new_hash
和 salt
可以保存到一个文件(或数据库,或其他存储介质),你可以在以后的某个时间加密用户的密码输入新程序,然后将哈希值与文件中存储的内容进行比较。
这是 Python Docs Example .
关于Python - 与另一个脚本共享 getpass() 输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36625871/
import getpass password=getpass.getpass(prompt="Password: ") print(password) 这个非常简单的代码显示错误: Warni
我是 Python 的新手,但我已经搜索过这方面的答案。我的代码是: import urllib, http import gspread import datetime import getpass
在 Windows 7 上运行并使用 PyCharm 2016.2.3(如果有必要的话)。 无论如何,我正在尝试编写一个向收件人发送电子邮件的程序,但我希望控制台提示输入密码才能登录。 我听说getp
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
在 Windows 7 上运行并使用 PyCharm 2016.2.3(如果有的话)。 无论如何,我正在尝试编写一个向收件人发送电子邮件的程序,但我希望控制台提示输入密码才能登录。 听说getpass
我试图得到一个提示,询问我的密码,但是当我尝试调用getpass.getpass()时,它只是卡住了。我在Canopy上使用Python 2.7在Windows 7 64位上运行。 import sy
我在 os x 上编写了一个脚本,导入 getpass 并要求输入密码: a = getpass.getpass("Password: ") 但是当我在 Linux 中运行相同的代码时: python
我发现 getpass 在 PyCharm 中不起作用。它只是挂起。 事实上似乎 msvcrt.getch 和 raw_input 也不起作用,所以问题可能不在于 getpass。取而代之的是 PyC
我想在没有回显的情况下在 Windows 的 IDLE 终端中输入密码。 通常使用 python 使用函数 getpass.getpass() 可以输入密码,但在 IDLE 中会出现以下警告消息: G
以下结构脚本是开源的,我需要使用它,不幸的是我不熟悉这些东西。结构文件以: from fabric.api import * import time env.user = 'aegir' env.sh
我正在尝试 getpass(),我想我应该尝试一下: char *key1 = getpass("K: "); char *key2 = getpass("K: "); if(key1 == key2
今天我正在编写一些代码,在某个时候我需要 getpass 函数,一切都很好,至少在我使用 --std=c11 之前我得到了: error: implicit declaration of functi
所以我不知道我是否遗漏了一些文档,但我有两个关于 getpass 的问题。 我好像没法保存密码 之后回显密码 >>> pass = getpass.getpass() File "", line
我正在寻找一个实例示例,我们导入 Python getpass 库,输入我们的密码,但密码没有回显到终端。 这是一个将密码回显到终端的示例: $ python >>> import getpass >
假设我有以下短程序,我将其称为Parent.c。 #include #include #include int main(){ char buffer[100]; memset(
这个问题在这里已经有了答案: "GetPassWarning: Can not control echo on the terminal" when running from IDLE (4 个答案
我正在尝试制作一个由多个模块组成的脚本,这些脚本需要 su/sudo,但我不想让用户每次都输入他们的密码,我只想询问一次并完成它。 (我也不想以明文形式存储密码,因为它旨在用于具有不同用户/密码的不同
我一直在寻找一个 getpass() 替代方法,它实际上是我创建的隐藏密码输入的最简单方法。对于 C++ 来说,这是一种损失,因为它是一种如此简单的函数,却有很多用途。 我想知道的是为什么它被认为已过
我正在编写一个 python 脚本来运行一些命令。其中一些命令要求用户输入密码,我确实尝试在他们的标准输入中输入数据,但它不起作用,这里有两个简单的 python 程序代表问题 输入.py impor
大家好,刚刚开始涉足一个小 Python 来帮助处理一些工作中的脚本,但我似乎被一个小问题所困扰。 我在我的开发平台上使用 Eclipse 和 pydev,并针对 python 2.7.3 进行开发。
我是一名优秀的程序员,十分优秀!