Python'da komut satırlarında daha sonra kullanılabilecek sayı dizisi nasıl oluşturulur?

Benim yapmak istediğim, bazı dosyaları girdi olarak alan bir betik yazmak ve daha sonra bazı komutları çalıştırmaktır! Önce kullanıcının kaç dosya dozu olduğunu bilmek istiyorum ve daha sonra onu yüklemesini istemek ve daha sonra bir komut çalıştırmak istiyorum. Bu yüzden bu komutu kullandım: için 19 2 31'de benzer bir durumda uzun bir süre önce ama şimdi bu komutu kullandığımda bir syntex hatası alıyorum! bu benim comand'ım:

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"

Ve bu aldığım hata:

>         for cnt in 'seq 1 1 int(readnumber)'; do
>                                             ^
>     SyntaxError: invalid syntax

Ben çok seviyorum = readnumber = 3 koyduğunuzda o zaman bu size yüklemenizi (veya giriş):

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

ve sonra benim komutumu çalıştırın!

0
ya ben öyle düşünüyorum! Tamam bu yüzden çalışmıyor! Herhangi bir fikir python'da bunu nasıl yapabilirim?
katma yazar mahmood, kaynak
Bash sözdizimini python ile karıştırıyor musunuz?
katma yazar mouad, kaynak
Python ile Bash kabuk senaryosu gibi görünen şeyleri karıştırıyorsunuz ...
katma yazar AKX, kaynak

4 cevap

Muhtemelen böyle bir şey istiyorsun:

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
katma
çok teşekkürler! hayır python'u kullanmak istedim ama eski bash komutumla karıştırdım! Cevabınız için teşekkürler istediğim şey
katma yazar mahmood, kaynak
@mahmood: Bu istediğini elde etmek için Python yolu gibi görünüyor. Python'dan gerçekten Bash komutunu çalıştırmak istiyorsanız, örneğin os.system (command) veya subprocess.popen (command) komutlarını kullanabilirsiniz. , Eğer gerekliyse).
katma yazar heltonbiker, kaynak

Python'u bash komut dosyasıyla karıştırıyor gibi görünüyorsun. raw_input , Python'dur, ancak komut dosyasındaki diğer her şey bash'dir.

Python'daki her şeyi yeniden yazmaya çalışmak yerine, sadece bash kullanmanız gerekiyor gibi görünüyor, belki raw_input yerine read komutuyla.

1
katma
evet hatamı anlıyorum! ama pythonda yazmak istiyorum. yine de teşekkürler.
katma yazar mahmood, kaynak
@DanielRoseman ile aynı fikirdeyim ki, Python'u öğrenme fırsatım olacaktı, çünkü bazı görevlere (ama elbette her göreve değil) daha güçlüdür. Aslında, bir linux sisteminde, Python ve Bash THE RIGHT WAY'ın karıştırılması, önemsiz ve önemsiz olmayan görevleri kolay ve hızlı bir şekilde gerçekleştirmenin çok güçlü bir yoludur.
katma yazar heltonbiker, kaynak

Sizin için - satır sizin Python kodunda değil, bash - kabuklarında kullanılan bir for ifadesidir.

Yapmak istediğin şey, for-line'ı yeniden yazmaktır:

for cnt in range(1, readnumber):

Ayrıca, diğer satırları da yeniden yazmanız gerekecek, çünkü bunlar da bash sözdizimi.

0
katma

Bir python programında bash sözdizimini kullanmaya çalışıyorsunuz. Onlar farklı dillerdir. Örneğin, seq komutu bunun yerine xrange (...) komutu olmalıdır. Ayrıca, python değişken sözdizimi yerine $ somevar bash değişken sözdizimi kullanıyorsunuz.

Yani yahut kullanın ya da Python kullanın, ancak n-match eşleştirmeyi denemeyin.

Ayrıca, kullanıcının kendileri için kullanıcıya sormak yerine dosya adlarını komut satırında sağlamasını da düşünebilirsiniz. Bu, komut dosyanızı daha sonra bir yapı taşı olarak daha kullanışlı hale getirecektir.

0
katma