Haritalamayı, ping_all işlevini ana makine listesine eşlemek için kullanmaya çalışıyorum. Kullanmakta olduğum sorun, ping_all işlevinin içinde, başarısız olan tüm ana bilgisayarları bir listeye eklemeye çalışıyorum. Normalde ping_all işlevini çağırır, boş listede bir argüman olarak geçip değiştirilmiş listeyi döndürürüm, ancak haritayı burada kullandığımdan, bunu nasıl başaracağımı bilmiyorum. Harita işlevini kullanarak bir listeye nasıl eklenir?
import os
import argparse
from subprocess import check_output
from multiprocessing import Pool
parser = argparse.ArgumentParser(description='test')
args = parser.parse_args()
dead_hosts = []
def gather_hosts():
""" Returns all environments from opsnode and puts them in a dict """
host_list = []
url = 'http://test.com/hosts.json'
opsnode = requests.get(url)
content = json.loads(opsnode.text)
for server in content["host"]:
if server.startswith("ip-10-12") and server.endswith(".va.test.com"):
host_list.append(str(server))
return host_list
def try_ping(hostnames):
try:
hoststatus = check_output(["ping", "-c 1", hostnames])
print "Success:", hostnames
except:
print "\033[1;31mPing Failed:\033[1;m", hostnames
global dead_hosts
dead_hosts.append(hostnames)
def show_dead_hosts(dead_hosts):
print '\033[1;31m******************* Following Hosts are Unreachable ******************* \n\n\033[1;m'
for i in dead_hosts:
print '\033[1;31m{0} \033[1;m'.format(i)
if __name__ == '__main__':
hostnames = gather_hosts()
pool = Pool(processes=30) # process per core
pool.map(try_ping, hostnames, dead_hosts)
show_dead_hosts(dead_hosts)
Haritaya ikinci argüman olarak dead_hosts geçen çalıştı, ancak, o görünmüyor bu komut dosyası çalıştırdıktan sonra, dead_hosts barındıran listesine ekleme olduğu boş bir liste kalır.
Neyi yanlış yapıyorum?
Kimlik = lambda çizgisinin amacı nedir? – david
Sadece lambda kimliğini doğrudan filtre çağrısına koymaktan daha okunaklı olduğunu düşündüm. İsterseniz tabii ki satır içi yapabilirsiniz. – DaoWen
ama demek istediğim, bu satırın neden gerekli olduğunu anlamıyorum – david