Как сгенерировать последовательность чисел, которую позже можно будет использовать в командных строках в python?

#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) , например, or subprocess.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.