Как сгенерировать последовательность чисел, которые впоследствии можно будет использовать в командной строке в python? - PullRequest
0 голосов
/ 28 октября 2011

что я хочу сделать, это написать скрипт, который получит в качестве входных данных несколько файлов, а затем выполнить для них команду! Сначала я хочу узнать, сколько файлов дозирует пользователь, а затем попросить его / ее загрузить его, а затем я хочу выполнить какую-либо команду для него. Поэтому я использовал эту команду: for cnt in seq 19 2 31 в подобной ситуации давным-давно, но теперь, когда я использую эту команду, я получаю синтаксическую ошибку! это моя команда:

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:

и затем запустите мою команду на нем!

Ответы [ 4 ]

2 голосов
/ 28 октября 2011

Вы, вероятно, хотите что-то вроде этого:

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 голос
/ 28 октября 2011

Похоже, вы путаете Python со скриптами bash.raw_input - это Python, но все остальное в скрипте - bash.

Вместо того, чтобы пытаться переписать все это в Python, кажется, что вы должны просто использовать bash, возможно с командой read вместоraw_input.

0 голосов
/ 28 октября 2011

Ваша строка for это не Python-код, это оператор for, используемый в bash -shells.

Что вы хотите сделать, это переписать for-line в это:

for cnt in range(1, readnumber):

Также вам придется переписать и другие строки, так как они также являются синтаксисом bash.

0 голосов
/ 28 октября 2011

Вы пытаетесь использовать синтаксис bash в программе на Python.Это разные языки.Например, команда seq должна быть командой xrange(...).Вы также используете синтаксис переменной bash $somevar вместо синтаксиса переменной python.

Так что либо используйте bash, либо используйте Python, но не пытайтесь mix-n-match.может потребоваться, чтобы пользователь предоставил имена файлов в командной строке, а не запрашивал у пользователя их.Это сделает ваш сценарий более полезным в качестве строительного блока позже.

...