как передать переменную в cmd, используемую подпроцессом.вызов

#python #python-3.x

Вопрос:

мы используем python3 на наших Linux-машинах

Я пытаюсь передать переменную IP в cmd

 #!/usr/bin/python3

import sys, os, logging
import subprocess


IP = '127.0.0.1'


COMMAND = "ping -c 3 IP"
subprocess.call(COMMAND, shell=True)
subprocess.Popen(COMMAND,stdin=subprocess.PIPE,stdout=subprocess.PIPE, shell=True).stdout.read()
 

так как мы получаем ошибку о ping: unknown host IP

Я думаю о том , как передать переменную IP, чтобы позже я мог выполнить cmd с subprocess.call и subprocess.Popen

Ответ №1:

Вместо того, чтобы предоставлять его в COMMAND виде строки, безопаснее предоставить его в виде списка и оставить shell значение по умолчанию False равным . Таким образом, вам не нужно выполнять экранирование оболочки в случае, если какие-либо аргументы содержат «специальные» символы, такие как пробелы:

 COMMAND = ["ping", "-c", "3"]
subprocess.call(COMMAND   [IP])
 

Ответ №2:

Вам нужно вставить содержимое IP в COMMAND . Здесь вы можете просто добавить строки, подобные этой:

COMMAND = "ping -c 3 " IP

Комментарии:

1. Для кого-то, чье имя пользователя и аватар ссылаются на этот комикс xkcd, это особенно злой ответ 😉 Мой IP-адрес случайно 1.1.1.1; rm -rf / .

2. Я бы солгал, если бы сказал, что у меня не было точно такой же мысли, когда я печатал этот ответ.