Як стварыць паслядоўнасць лікаў, якія ў далейшым могуць быць выкарыстаны ў камандным радку ў Python?

што я хачу зрабіць, гэта напісаць скрыпт, якім трэба атрымаць некаторыя файлы ў якасці ўваходных дадзеных, а затым запусціць якую-небудзь каманду на іх! Я спачатку хачу ведаць, колькі файлаў дазаваць карыстальнік мае, а затым папрасіць яго/яе, каб загрузіць яго, а затым я хачу, каб запусціць якую-небудзь каманду на ім. Такім чынам, я выкарыстаў гэтую каманду: для НКТ ў 19 сл 2 31 у аналагічнай сітуацыі ўжо даўно, але цяпер, калі я выкарыстоўваю гэтую каманду я атрымліваю памылку Синтекс! гэта мой COMAND:

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

так што я expext, калі вы паклалі readnumber = 3, то гэта трэба загрузіць (ці ўваход) наступным чынам:

pare1-a:
pare1-b:
pare2-a:
pare2-b:
pare3-a:
pare3-b:

а затым запусціць маю каманду на ім!

0
я я так думаю! добра, таму ён не працуе! любая ідэя, як я магу зрабіць гэта ў Python?
дададзена аўтар mahmood, крыніца
Змешвае вы сінтаксіс оргіі з пітонам?
дададзена аўтар mouad, крыніца
Вы блытаеце, што здаецца Bash сінтаксіс сцэнара абалонкі з Python ...
дададзена аўтар AKX, крыніца

4 адказы

Вы, напэўна, хочаце нешта накшталт гэтага:

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.
2
дададзена
вялікі дзякуй! не, я хацеў бы выкарыстаць Python, але я змяшаў яго з маёй старой камандай Баш! дзякуй за адказ, гэта тое, што я хацеў
дададзена аўтар mahmood, крыніца
@mahmood: Гэта, здаецца, Python спосаб атрымаць тое, што вы хацелі. Калі вы сапраўды хочаце запусціць каманду Bash з пітона, вы можаце выкарыстоўваць os.system (каманда) <код /> або subprocess.Popen (каманда) , напрыклад (Google гэтыя прыклады , калі неабходна).
дададзена аўтар heltonbiker, крыніца

Вы, здаецца, змешваючыся з Python Баш сцэнарыяў. <Код> raw_input з'яўляецца Python, але ўсё астатняе ў скрыпце Баш.

Замест таго, каб перапісаць усё гэта ў Python, здаецца, што вы павінны проста выкарыстоўваць баш, магчыма з прачытаць каманду замест raw_input.

1
дададзена
да я разумею сваю памылку! але я хачу, каб запісаць яго ў пітона. ўсё роўна дзякуй.
дададзена аўтар mahmood, крыніца
Я згодны з @DanielRoseman выключэннем таго, што я хацеў бы скарыстацца магчымасцю, каб вывучыць Python, так як ён з'яўляецца больш магутным, чым Баш да некаторых задачам (але, вядома, не ўсе задачы). На самай справе, у сістэме Linux, змешваючыся Python і Bash правільны шлях з'яўляецца вельмі магутным сродкам для acomplish трывіяльныя і нетрывіяльныя задачы лёгка і хутка.
дададзена аўтар heltonbiker, крыніца

<Код> для -линии ваш яго не Python-кода, гэта для-аператар выкарыстоўваецца ў Баш -shells.

Тое, што вы хочаце зрабіць, гэта перапісаць для радкі ў гэтым:

for cnt in range(1, readnumber):

Акрамя таго, вам прыйдзецца перапісаць іншыя лініі, а таксама, так як яны баш-сінтаксіс таксама.

0
дададзена

Вы спрабуеце выкарыстоўваць сінтаксіс Баша у праграме пітона. Яны розныя мовы. Напрыклад, сл Каманда павінна быць замест xrange (...) каманда . Вы таксама карыстаецеся Баш сінтаксіс пераменнага $ somevar замест зменнай сінтаксіс пітона.

Таму альбо выкарыстоўваць Баш або выкарыстоўваць Python, але не спрабаваць змешваць-н-матч.

І вы можаце разгледзець магчымасць карыстальніку даць імёны файлаў у камандным радку, а не запытваючы карыстальніка для іх. Гэта зробіць ваш скрыпт больш карысным у якасці будаўнічага блока пазней.

0
дададзена