2017-02-01 35 views
1

У меня есть список хостов, которые я пытаюсь выполнить для соединения ssh. В ruby ​​я могу использовать # {variable} для доступа к переменной внутри команды, что я должен делать для python?Переменная интерполяция в цикле for?

Я включил синтаксис ruby ​​в следующий код python в качестве заполнителя, где мне нужны функциональные возможности. Что такое питонический способ сделать это?

h = """ 
foo-pants-linux-001 
foo-pants-linux-002 
foo-pants-linux-003 
foo-pants-linux-004 
foo-pants-linux-005 
""" 

hosts = h.split() 

for host in hosts: 
    subprocess.check_output("ssh [email protected]#{host} `echo hi!`") 
+0

Возможный дубликат [Есть ли эквивалент Python для интерполяции строк Ruby?] (Http://stackoverflow.com/questions/4450592/is-there-a-python-equivalent-to-rubys-string-interpolation) –

+0

Если ваш 'h' будет состоять из нескольких строк, а не просто разделенных пробелами,' h.splitlines() 'является более явным/безопасным (если вы хотите добавить аргумент вдоль имени узла, возможно), чтобы нарезать это вверх. –

ответ

1

Вы можете использовать либо по модулю (%) или .format(..):

subprocess.check_output("ssh [email protected]%s `echo hi!`"%host) 
subprocess.check_output("ssh [email protected]{host} `echo hi!`".format(host=host)) 
subprocess.check_output("ssh [email protected]{} `echo hi!`".format(host)) 

%s является спецификатором формата означает, что вы принять строковое значение хоста.

В случае, если вы хотите, чтобы ввести множественные названные переменные, которые можно использовать {host}, а затем вызвать format() с параметром явным именем.

Вы также можете использовать {}, что означает, что вы берете следующий элемент в аргументах, указанных в .format(..).

Смежные вопросы