我在cli中使用以下命令,如下所示,
[mbelagali@mbelagali-vm naggappan]$ aws ec2 create-vpc --cidr-block 172.35.0.0/24 --no-verify-ssl --endpoint-url https://10.34.172.145:8787
/usr/local/aws/lib/python2.6/site-packages/botocore/vendored/requests/packages/urllib3/connectionpool.py:769:
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
"Vpc": {
"InstanceTenancy": "default",
"State": "pending",
"VpcId": "vpc-ebb1608e",
"CidrBlock": "172.35.0.0/24",
"DhcpOptionsId": "dopt-a24e51c0"
}
现在我使用“2> / dev / null”重定向警告,以便我只获得json响应。
现在我需要使用python子进程实现它,因此尝试了以下选项,
cmd = "aws ec2 create-vpc --cidr-block " + cidr_block + " --no-verify-ssl --endpoint-url " + endpoint_url
cmd_arg = shlex.split(cmd.encode('utf-8'))
p1 = subprocess.Popen(
cmd_arg,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
output, error = p1.communicate()
现在在输出变量中,我得到的是完整的输出,包括警告消息,如何在shell脚本中忽略警告消息
答案 0 :(得分:2)
如果您不想要stderr消息,则不应该使用等同于stderr=subprocess.STDOUT
的标记2>&1
。如果你只是删除我怀疑你会得到你想要的。如果要将stderr重定向到/ dev / null,可以按照以下答案操作:How to hide output of subprocess in Python 2.7
答案 1 :(得分:0)
要分隔stderr和stdout,只需创建两个独立的管道。
p1 = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
完全忽略stderr只需打开devnull并在那里重定向stderr。
with open(os.devnull) as devnull:
p1 = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=devnull)
os.devnull空设备的文件路径。例如:'/ dev / null' 适用于POSIX,适用于Windows的'nul'。也可以通过os.path。
获得
答案 2 :(得分:0)
获取子进程打印到stdout的json数据,同时忽略其stderr上的警告:
from subprocess import check_output
json_data = check_output(cmd, stderr=DEVNULL)