Какую ошибку или исключение вы получаете при запросе этого API? Это проблема разрешения DNS?
Если это проблема разрешения DNS. Затем проверьте, работает ли KubeDNS или CoreDNS в вашем кластере kubernetes. Если указанное выше работает, попробуйте пропинговать хост с вашего модуля.
Редактировать 1:
Похоже, что соединение сокета закрывается при чтении с сервера. Попробуйте передать аргумент auto_reconnect при вызове функции rtm_connect.
slack_client.rtm_connect(auto_reconnect = True)
Нечто похожее на ваш оригинальный подход в sed:
sed '/regexp/i\
$H
x'
Основная идея - напечатать все с задержкой в одну строку ( x изменить пробел и пробел - печать неявна). Это необходимо сделать, потому что пока мы не проверим, соответствует ли следующая строка регулярному выражению, мы не знаем, следует ли i вставлять новую строку или нет.
($ H - это просто хитрость для печати последней строки. Она добавляет последнюю строку в буфер хранения, так что последняя неявная команда печати тоже выводит ее.)
Более читабельный Perl, и обрабатывает несколько файлов разумно.
#!/usr/bin/env perl
use constant LINES => 2;
my @buffer = ();
while (<>) {
/pattern/ and unshift @buffer, "\n";
push @buffer, $_;
print splice @buffer, 0, -LINES;
}
continue {
if (eof(ARGV)) {
print @buffer;
@buffer = ();
}
}
Простой:
sed '1{x;d};$H;/regexp/{x;s/^/\n/;b};x'
Опишите его
#!/bin/sed
# trick is juggling previous and current line in hold and pattern space
1 { # at firs line
x # place first line to hold space
d # skip to end and avoid printing
}
$H # append last line to hold space to force print
/regexp/ { # regexp found (in current line - pattern space)
x # swap previous and current line between hold and pattern space
s/^/\n/ # prepend line break before previous line
b # jump at end of script which cause print previous line
}
x # if regexp does not match just swap previous and current line to print previous one
Редактировать : Немного более простая версия.
sed '$H;/regexp/{x;s/^/\n/;b};x;1d'
perl -ne 'END{print @x} push@x,$_; if(@x>2){splice @x,1,0,"\n" if /[[:alpha:]]\d[[:alpha:]]\s?\d[[:alpha:]]\d/;print splice @x,0,-2}'
Если я вложу ваш файл в это, я получу то, что вы хотите ... это уродливо, но вы хотели оболочки ( т. е. однострочное) :-) Если бы я делал это в полном Perl, я мог бы многое почистить, чтобы сделать его читабельным. : -)
Вот подход, который работает для Python.
import sys
def address_change( aFile ):
address= []
for line in aFile:
if regex.match( line ):
# end of the address
print address[0]
print
print address[1:]
print line
address= []
else:
address.append( line )
address_change( sys.stdin )
Это позволяет вам переформатировать полный адрес для вашего сердца. Вы можете расширить это, чтобы создать класс Address
, если ваше форматирование сложное.
Я попытался
sed '/regexp/a\\n'
, но он вставил две строки. Если вас это не беспокоит, возьмите это.
echo -e "a \ nb \ nc" | sed '/ ^ a $ / a \ n'
ab
c
Редактировать: Теперь, когда вы заявляете, что вам нужно вставить две строки над соответствующим регулярным выражением, предложенное регулярное выражение не будет работать.
Я даже не уверен, будет ли оно вообще работать с sed, так как вам нужно помнить прошлые строки. Звучит как работа для языка более высокого уровня, такого как python или perl: -)