Я знаю, что этим вопросом является основное знание, как записать сценарий, но я не узнал что все же:
У меня есть программа, которая берет, как вход, список как: str_1,str_2, etc
. Строка всегда является тем же, но числа идут от 1 до 1 000. Очевидно, не возможно записать это вручную, таким образом, я хочу генерировать аргумент str_1,str_2, etc
автоматически и затем скопируйте его в оболочку (или, если существует лучший способ сделать, сообщите мне).
Как я могу генерировать этот список?
#!/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)
# 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 для больше при использовании массивов в ударе.
Это будет работать приятно в Bash только:
array=( str_{1..1000} )
joined_array="$(printf '%s,' "${array[@]}")"
echo "${joined_array%,}"
последнее echo
строка должна опустить запаздывающую запятую.
Первая строка команд от ответ geirha .
Существуют, как всегда, много решений.
Лично, для такой простой вещи как это, и при этом я не пишу целый сценарий 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'
замены все пробелы запятыми.