Python 执行windows shell命令并处理输出变量
在Windows上运行的Python 3.7中,需要什么特定语法:Python 执行windows shell命令并处理输出变量,python,python-3.x,cmd,terraform,Python,Python 3.x,Cmd,Terraform,在Windows上运行的Python 3.7中,需要什么特定语法: 1. Navigate to a directory containing a terraform program 2. Execute "terraform apply -auto-approve" in that target directory 3. Extract the resulting output variables into a form usable in python 输出变量可能采用以下形式
1. Navigate to a directory containing a terraform program
2. Execute "terraform apply -auto-approve" in that target directory
3. Extract the resulting output variables into a form usable in python
输出变量可能采用以下形式:
security_group_id_nodes = sg-xxxxxxxxxx
vpc_id_myvpc = vpc-xxxxxxxxxxxxx
希望在此处使用windows cmd样式的命令,而不是powershell
我第一次失败的新手尝试是:
import os
os.chdir('C:\\path\\to\\terraform\\code')
from subprocess import check_output
check_output("terraform apply -auto-approve", shell=True).decode()
不确定您的输出,但子流程肯定会成功 尝试以下方法:
command = 'terraform apply -auto-approve'
TARGET_DIR = 'E:\Target\Directory'
subprocess_handle = subprocess.Popen(shlex.split(command), cwd=TARGET_DIR, shell=False, stdout=subprocess.PIPE)
subprocess_handle.wait()
result = subprocess_handle.communicate()[0]
print(result)
为我工作过一次,只是和情妇们玩玩
UPD:在这里,我假设“terraform”是一个可执行文件。为什么不开始,但展示您已经尝试过的内容,使用子流程和os@d_kennetz我加了一些简单的东西。一开始我没有包括它的原因是因为它太少了。我想帮助理解如何处理这个简单的构建块,以便我可以从中构建。你有什么建议?@down投票者发布一个链接,链接到你认为答案是什么,或者是如何改进问题的建议。没有路过射击。Terraform是可执行的。然而,您建议的代码只是无限期地挂起,没有给出任何输出来解释正在发生的事情。@CodeMed,可能是这样的。这在很大程度上取决于程序的工作方式。您是否尝试使用
print()
检查它是否挂起wait()
或稍后的某个位置?选项包括:尝试“shell=True”,异步使用子进程(即不等待它完成),并且程序可能不会向stdout写入任何内容(示例正在尝试获取它)。恐怕这里的大部分工作都是尝试和错误的方法。下面打印过程中的结果subprocess.run(“terraform应用-自动批准”,shell=True,check=True)
。程序运行成功。但是,如何将输出导入某种处理,以便提取输出变量呢?但是为了让我仍然可以在命令行中看到正在运行的输出,以便能够理解发生了什么?@CodeMed,您可以自己用Python代码打印输出,而不是使用shell=True
。不完全确定细节,但是run()
也应该支持stdout重定向。因此,沟通应该是有效的。类似于“读取输出直到程序终止”。也不能指向异步配方,但这只是因为我必须自己用谷歌搜索它=)希望,你不再使用等待,是吗?