【发布时间】:2020-02-09 00:57:07
【问题描述】:
我之前使用 os.popen() 来使用 pytest 运行我的测试,并且一切正常。我所有的测试都与在 Vault 中编写、修改或删除有关。问题是我的一个测试要求我获得一个返回码值,这在 os.popen() 中不可用,所以我已经切换到 subprocess() 但现在我似乎无法获得任何功能正常。
我一直在浏览文档,我注意到我不能只传递像 os.popen 这样的字符串,我是否需要添加另一个参数,但我添加的任何东西都不起作用。
在我不得不切换到子进程之前,这段代码可以正常工作:
command = os.popen('vault write test/Hello value=world')
print(command.read())
这是我现在失败的测试之一的示例:
# Add secret and verify in vault
def test_add_secret_and_verify(self):
try:
command = subprocess.run('vault write test/Hello value=world')
print(command.read())
print("Secret created!")
command = subprocess.run('vault read -field=value test/Hello')
result = command.read()
print(result)
print("Verifying secret - "+result+" - is the same as created!")
self.assertEqual(result, "world")
except Exception as e:
print(e)
self.fail()
有多个错误页面,但最后它只是失败并说 subprocess.run() 不起作用。有谁知道我可以改变什么来让这个功能工作,或者建议我是否应该使用另一个功能?
【问题讨论】:
-
不熟悉
vault,vault write test/Hello value=world'是单条命令吗?试试command = subprocess.run(['vault', 'write', 'test/Hello' 'value=world']) -
这样的东西有用吗?
print(subprocess.check_output("echo 'success'", stderr=subprocess.STDOUT, shell=True)) -
@cdarke Vault 是一种用于存储令牌和机密的工具,是的,这是一个命令。我在文件夹“test”中创建了一个名为“Hello”的秘密,其值为“world”
标签: python bash subprocess pytest hashicorp-vault