如何向Python子进程写入数据?

ajsxfq5m  于 2023-01-14  发布在  Python
关注(0)|答案(1)|浏览(130)

我正在尝试编写一个Python脚本,该脚本启动一个子进程,以便在执行文件后运行Azure CLI命令。
当我在本地运行时,我运行:

az pipelines create --name pipeline-from-cli --repository https://github.com/<org>/<project> --yml-path <path to pipeline>.yaml --folder-path _poc-area

系统提示我输入如下内容:

Which service connection do you want to use to communicate with GitHub?
 [1] Create new GitHub service connection
 [2] <my connection name>
 [3] <org name>
Please enter a choice [Default choice(1)]:

我可以键入2并按Enter键,然后在Azure DevOps中成功创建我的管道。我希望在提示时运行动态输入的此命令。
到目前为止,我已经尝试:

import subprocess

cmd = 'az pipelines create --name pipeline-from-cli --repository https://github.com/<org>/<project> --yml-path <path to pipeline>.yaml --folder-path _poc-area
cmd = cmd.split()

subprocess.run(cmd, shell=True)

这将以与我尝试在本地运行时完全相同的方式运行。
尝试遵循here的答案我也尝试过:

p = subprocess.run(cmd, input="1", capture_output=True, text=True, shell=True)
print(p)

这给了我一个错误,说raise NoTTYException(error_msg)\nknack.prompting.NoTTYException
有没有一种方法可以让我执行这个Python脚本,它会运行Azure CLI命令,然后在提示时输入2,而无需任何手动干预?

0lvr5msh

0lvr5msh1#

您试图解决错误的问题。az pipeline create采用--service-connection参数。您不需要响应提示,可以在命令行上提供服务连接值并完全跳过提示。

相关问题