#python #numbers #range
#python #числа #диапазон
Вопрос:
что я хочу сделать, так это написать скрипт, который получит некоторые файлы в качестве входных данных, а затем запустит для них какую-нибудь команду! Сначала я хочу знать, сколько файлов у пользователя, а затем попросить его / ее загрузить его, а позже я хочу выполнить для него какую-то команду. Итак, я использовал эту команду: for cnt in
seq 19 2 31 в аналогичной ситуации давным-давно, но теперь, когда я использую эту команду, я получаю ошибку syntex! это моя команда:
readnumber= raw_input("How many pares do you have?" )
for cnt in `seq 1 1 int(readnumber)`; do
pare$cnt-a = raw_input("filename of pare$cnt-a: ")
pare$cnt-b = raw_input("filename of pare$cnt-b: ")
cmd = "samtools merge pare$cnt.bam pare$cnt-a pare$cnt-b"
И это ошибка, которую я получаю:
> for cnt in 'seq 1 1 int(readnumber)'; do
> ^
> SyntaxError: invalid syntax
итак, что я ожидаю, когда вы вводите readnumber= 3, тогда он попросит вас загрузить (или ввести) это:
pare1-a:
pare1-b:
pare2-a:
pare2-b:
pare3-a:
pare3-b:
а затем запустите мою команду на нем!
Комментарии:
1. Вы путаете синтаксис скрипта оболочки Bash с Python…
2. Вы смешиваете синтаксис bash с python?
3. да, я так думаю! хорошо, вот почему это не работает! есть идеи, как я могу сделать это на python?
Ответ №1:
Вы, вероятно, хотите что-то вроде этого:
pairs = int(raw_input("How many pairs do you have?"))
for pair_n in xrange(1, pairs 1):
file1 = raw_input("pair%d-a: " % pair_n)
file2 = raw_input("pair%d-b: " % pair_n)
cmd = "samtools merge pair%d.bam '%s' '%s'" % (pair_n, file1, file2)
# os.system(cmd) to run the command.
Комментарии:
1. @mahmood: Похоже, это способ Python получить то, что вы хотели. Если вы действительно хотите запустить команду Bash из python, вы можете использовать
os.system(command)
, например, orsubprocess.popen(command)
(Google для примеров, если необходимо).2. большое спасибо! нет, я хотел использовать python, но я смешал его со своей старой командой bash! спасибо за ответ, это то, что я хотел
Ответ №2:
Похоже, вы путаете Python со сценариями bash. raw_input
это Python, но все остальное в скрипте — bash.
Вместо того, чтобы пытаться переписать все это на Python, похоже, вам следует просто использовать bash , возможно, с read
помощью команды вместо raw_input .
Комментарии:
1. Я согласен с @DanielRoseman, за исключением того, что я бы воспользовался возможностью изучить Python, поскольку он более эффективен, чем bash, для некоторых задач (но, конечно, не для каждой задачи). На самом деле, в системе Linux ПРАВИЛЬНОЕ смешивание Python и Bash — это очень мощный способ легко и быстро выполнять тривиальные и нетривиальные задачи.
2. да, я понимаю свою ошибку! но я хочу написать это на python. в любом случае спасибо.
Ответ №3:
Вы пытаетесь использовать синтаксис bash в программе на python. Это разные языки. Например, seq
вместо команды должна быть xrange(...)
команда. Вы также используете синтаксис переменных bash $somevar
вместо синтаксиса переменных python.
Так что либо используйте bash, либо используйте Python, но не пытайтесь смешивать-n-match.
И вы можете подумать о том, чтобы пользователь указывал имена файлов в командной строке, а не запрашивал их у пользователя. Это сделает ваш скрипт более полезным в качестве строительного блока позже.
Ответ №4:
for
Ваша строка — это не Python-код, это оператор for, используемый в bash
оболочках.
Что вы хотите сделать, это переписать строку for в это:
for cnt in range(1, readnumber):
Кроме того, вам придется переписать и другие строки, поскольку они тоже являются синтаксисом bash.