2016-01-13 2 views
0

Я пытаюсь преобразовать этот скрипт в Python, но у меня возникают проблемы с синтаксисом BASH ${variable}. Это делает то, что я не понимаю, поскольку у меня очень мало опыта работы с BASH-скриптами. Мой вопрос в основном, как я могу сделать переменные в долларах в Python ${variable}. В моем случае переменная - это число от нуля до двухсот пятидесяти пяти. См. Ниже сценарий BASH. Я пытаюсь сделать то же самое в Python.Изменение сценария BASH на Python

do  

    for code in {0..255};   
     do echo -e "\e[38;05;${code}m $code: Test";   
     done; 

done 

Это моя попытка конвертировать код в скрипт Python. К сожалению, мне все еще приходится называть BASH с помощью метода или функции os.system(). Посмотрите мой сценарий ниже. Сценарий не работает одинаково, но с изменением текста в оболочке BASH. Сценарий Python ниже просто выводит сумасшедший текст ниже и увеличивает число ...:/

#! /usr/bin/env python 

import os 

def run(): 
    for code in range(0, 255): 
     os.system('echo -e "\e[38;05;%dm %s Test"' % (code,str(code))) 



run() 

ответ

3

Вы можете использовать команду print и string formatting оценить переменную во время печати.

Кстати, вы можете использовать xrange вместо range, чтобы не генерировать все номера в памяти, но yield его одним-на-один (для большого диапазона)

Вы можете использовать это:

import os 
def run(): 
    for code in range(0, 256): 
    print "\x1b[38;05;{code}m {code} Test".format(code=code) 

run() 
+1

диапазоны Баш включают: '{1..3}' = ' 1 2 3', поэтому вам нужно увеличить верхнюю границу диапазона для Python. '' \ e [38; 05; {code} m {code} Тест «.format (code = code)» будет ближе к оригиналу (и более читаемому). Python не знает '\ e', вам нужно использовать' \ x1b'. – kay

+0

Исправление означает, что вы используете 'range()', а не 'xrange()'? –

+0

Я отредактировал свой комментарий. – kay

0

Вам необходимо использовать string formatting.

Как ни странно, вы уже делаете это в своем коде (но используя старый синтаксис % вместо нового метода .format). Я даже не уверен, почему вы думаете, что вам нужно позвонить echo, поскольку строка, которую вы передаете, уже является той строкой, которую вы пытаетесь получить (если я правильно понимаю ваш вопрос). Просто используйте функцию print для вывода строки.

-2

попробовать это:

#! /usr/bin/env python 

import os 

def run(): 
    for code in range(0, 255): 
     os.system('/bin/echo -e "\e[38;05;%dm %s Test"' % (code,str(code))) 



run() 

echo обычно как extrnal программы и внутренняя команда оболочки, которая может сделать разницу когда-то

+1

Нет, не пробуйте это.Для этого небольшого примера вам не нужно использовать внешние программы. – kay

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