Основной вопрос о печати удара

Я знаю, что этим вопросом является основное знание, как записать сценарий, но я не узнал что все же:

У меня есть программа, которая берет, как вход, список как: str_1,str_2, etc. Строка всегда является тем же, но числа идут от 1 до 1 000. Очевидно, не возможно записать это вручную, таким образом, я хочу генерировать аргумент str_1,str_2, etc автоматически и затем скопируйте его в оболочку (или, если существует лучший способ сделать, сообщите мне).

Как я могу генерировать этот список?

0
задан 7 March 2014 в 00:19

4 ответа

#!/usr/bin/python3

import os

def create_list(string_input):
    number = 0
    string_list = []
    while number <= 1000:
        number = number+1
        string_list.append(string_input+str(number))
    return(string_list)

command_list = create_list(string_input = "test")
for item in command_list:
    os.system("firefox -new-tab "+item)

Это запустило бы Firefox 1000 раз, открыв новые вкладки с "test1, test2" как URL (не пробуйте:))

изменение "string_input" к Вашей строке, "Firefox - новая вкладка" к Вашему приложению.

редактирование: у Меня, должно быть, был слабый момент, может быть намного короче в Python также, конечно:

#!/usr/bin/python3

import subprocess

command_list = [
    "firefox -new-tab "+"test"+str(number) for number in range(0,1001)
    ]
for command in command_list:
    subprocess.call(command)
1
ответ дан 27 August 2019 в 22:53
# array=( str_1 str_2 str_3 ... str_1000 )
array=( str_{1..1000} )          

# prints the content of the array as a single string with comma between elements. 
# str_1,str_2,str_3,...,str_1000   
( IFS=,; printf '%s\n' "${array[*]}"; ) 

См. http://mywiki.wooledge.org/BashFAQ/005 для больше при использовании массивов в ударе.

1
ответ дан 27 August 2019 в 22:53

Это будет работать приятно в Bash только:

array=( str_{1..1000} )
joined_array="$(printf '%s,' "${array[@]}")"
echo "${joined_array%,}"

последнее echo строка должна опустить запаздывающую запятую.

Первая строка команд от ответ geirha .

1
ответ дан 27 August 2019 в 22:53

Существуют, как всегда, много решений.

Лично, для такой простой вещи как это, и при этом я не пишу целый сценарий Python, и при этом я не объявляю массивы в ударе или изменяю внутреннего разделителя полей.

Вместо этого я просто пишу что-то вроде этого, прямо из командной строки, в одной строке:

for i in {1..1000}; do printf str_$i,; done

Это произведет строку str_1,str_2,...,str_1000,. В зависимости от уровня автоматизации Вам нужно, если требуется разделить запаздывание , тогда, одно из предполагаемого огромного количества возможностей должно использовать sed:

for i in {1..1000}; do printf str_$i,; done | sed 's/,$//;'

предоставление Вас str_1,str_2,...,str_1000.

Обновление:

Это просто прибыло ко мне, что, так как Вы только хотите сделать печать, можно даже обойтись без явного цикла. Короткий & хрустящий картофель:

echo str_{1..1000} | sed 's/ /,/g'

последняя команда также дает Вам str_1,str_2,...,str_1000.

Объяснение: Эти echo str_{1..1000} выводы str_1 str_2 ... str_1000. sed 's/ /,/g' замены все пробелы запятыми.

0
ответ дан 27 August 2019 в 22:53

Другие вопросы по тегам:

Похожие вопросы: