从 shell 脚本中读取 getpass
Making getpass read from shell script
我有 python 个脚本(第 3 方脚本)调用 getpass。
我需要使用脚本来提供密码。简单管道不起作用,因为根据文档,getpass 读取自 /dev/tty.
我绝不是 shell 或 python 专家,所以有没有办法(不修改使用 getpass 的 .py 脚本)通过 bash\shell 脚本提供密码?
这基本上是设计从键盘获取输入。如果你不想要那个,并且你不能更改脚本以改为从 correctly-permissioned 配置文件中读取它,那么我将完全修改 getpass 调用。
from mock import patch
with patch('path.to.import.getpass') as mock:
mock.return_value = 'hunter2'
# call your script
详细说明 "call your script",如果此脚本有适当的 entry point,例如从 setuptools 生成,然后在源代码中查找被调用的底层函数。您可以导入模块并将相同的函数直接调用到 "run" 脚本。但是,如果脚本只是一堆模块级代码,那么您将不得不使用 exec
并显式传入包括 monkeypatch 的范围。
如果您出于某种原因不能依赖 mock
,您可以使用简单的上下文管理器:
class NeuteredGetpass:
def __init__(self, new_pwd):
def noop(*args, **kwargs):
return new_pwd
self.oldpass = getpass.getpass
self.newpass = noop
def __enter__(self):
getpass.getpass = self.newpass
def __exit__(self, exc_type, exc_val, exc_tb):
getpass.getpass = self.oldpass
use_this_pass = NeuteredGetpass
with use_this_pass('password_from_shell_script'):
# do your stuff
...
我有 python 个脚本(第 3 方脚本)调用 getpass。
我需要使用脚本来提供密码。简单管道不起作用,因为根据文档,getpass 读取自 /dev/tty.
我绝不是 shell 或 python 专家,所以有没有办法(不修改使用 getpass 的 .py 脚本)通过 bash\shell 脚本提供密码?
这基本上是设计从键盘获取输入。如果你不想要那个,并且你不能更改脚本以改为从 correctly-permissioned 配置文件中读取它,那么我将完全修改 getpass 调用。
from mock import patch
with patch('path.to.import.getpass') as mock:
mock.return_value = 'hunter2'
# call your script
详细说明 "call your script",如果此脚本有适当的 entry point,例如从 setuptools 生成,然后在源代码中查找被调用的底层函数。您可以导入模块并将相同的函数直接调用到 "run" 脚本。但是,如果脚本只是一堆模块级代码,那么您将不得不使用 exec
并显式传入包括 monkeypatch 的范围。
如果您出于某种原因不能依赖 mock
,您可以使用简单的上下文管理器:
class NeuteredGetpass:
def __init__(self, new_pwd):
def noop(*args, **kwargs):
return new_pwd
self.oldpass = getpass.getpass
self.newpass = noop
def __enter__(self):
getpass.getpass = self.newpass
def __exit__(self, exc_type, exc_val, exc_tb):
getpass.getpass = self.oldpass
use_this_pass = NeuteredGetpass
with use_this_pass('password_from_shell_script'):
# do your stuff
...