欧斯波本使用pytes进行子进程转换

2024-04-18 00:09:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是欧斯波本()之前使用pytest运行测试,一切正常。我的所有测试都与在Vault中写入、修改或删除相关。问题是我的一个测试要求我获取一个返回代码值,这在中是不可用的欧斯波本()所以我切换到subprocess(),但现在我似乎无法让任何函数工作。你知道吗

我一直在看医生,我注意到的是我不能像这样传递一个字符串欧斯波本我是否需要添加另一个参数,但我添加的任何参数都不起作用。你知道吗

在我必须切换到子流程之前,此代码用于工作:

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()

有多页的错误,但最终它只是失败了,说子流程运行()不起作用。有没有人知道我可以改变什么来让这个函数工作,或者建议我是否应该使用另一个函数?你知道吗


Tags: 函数代码testselfhelloworldread参数
2条回答

问题是args参数子流程运行takes应该是字符串列表。所以你需要像这样运行它:

result = subprocess.run(['vault', 'write', 'test/Hello', 'value=world'])

或者

result = subprocess.run('vault write test/Hello value=world'.split(" "))

您可以阅读有关子流程模块here的更多信息

谢谢你的帮助!我只想打印出马库斯帮助我完成的第一个命令和我能够理解的第二个命令的答案。你知道吗

command = subprocess.run('vault write test/Hello value=world'.split(" "))

最终工作并创造了“世界”的价值

result = subprocess.run('vault read -field=value test/Hello'.split(" "),stdout=subprocess.PIPE,universal_newlines=True)

最后将值添加到字符串中

self.assertEqual(result.stdout, "world")

最后,相等函数起作用,因为结果的输出是world,它等于我设置的单词。你知道吗

相关问题 更多 >

    热门问题