2016-02-27 4 views
1

Я написал код Python для программного программирования, который затем я хочу использовать во внешней программе подключения.Использовать строку в подпроцессе

Я не знаю, как передать его подпроцессу:

import subprocess 
from subprocess import call 

some_ip = "192.0.2.0" # Actually the result of some computation, 
         # so I can't just paste it into the call below. 

subprocess.call("given.exe -connect host (some_ip)::5631 -Password") 

Я прочитал, что я мог бы и нашел подобные вопросы, но я действительно не могу понять этот шаг, чтобы использовать значение some_ip в подпроцесс. Если бы кто-то мог это объяснить, это было бы весьма признательно.

+0

Я отредактировал и вопрос, и мой ответ. Поскольку мои предыдущие комментарии были устаревшими, я их удалил. Вы также можете удалить свои комментарии. (Они могут сбивать с толку без контекста.) –

ответ

1

Если вы не используете его с shell=True (и я не рекомендую shell=True, если вы действительно не знаете, что вы делаете, как и режим оболочки может иметь последствия для безопасности) subprocess.call принимает команду в виде последовательности (например, list) его компонентов: сначала исполняемое имя, затем аргументы, которые вы хотите передать ему. Все они должны быть строками, но являются ли они строковыми литералами, переменные, содержащие строку или вызовы функций, возвращающие строку, не имеют значения.

Таким образом, следующее должно работать:

import subprocess 

some_ip = "192.0.2.0" # Actually the result of some computation. 

subprocess.call(
    ["given.exe", "-connect", "host", "{}::5631".format(some_ip), "-Password"]) 
  • Я использую str's format method заменить {} заполнитель в "{}::5631" со строкой в ​​some_ip.
  • Если вы вызываете его как subprocess.call(...), то

    import subprocess 
    

    достаточно и

    from subprocess import call 
    

    ненужно. Последнее потребуется, если вы хотите вызвать функцию как call(...). В этом случае прежний импорт будет ненужным.

+0

Это работает! Большое спасибо! –

+0

Возможно, я слишком скоро говорю, я пробовал работать на компьютере (доступ к VPN), и я не смог сделать то же самое для пароля, если я его поставил перед IP, он не используется и после него используется как хозяин. Я заметил, что в прошлый раз вы отправили что-то о пароле, но затем комментарии были удалены. Не могли бы вы так помочь мне в этом вопросе? Заранее спасибо. –

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