2011-10-28 7 views
0

私がしたいことは、入力としていくつかのファイルを取得し、それらのコマンドを実行するスクリプトを書くことです!私はまず、どれくらいのファイルがユーザーに与えられているのかを知りたいと思って、アップロードするよう依頼して、後でそれについてコマンドを実行したい。 私はこのコマンドを使用しました:for cnt in seq 19 2 31同様の状況で長時間前ですが、今はこのコマンドを使用するとシンセシスエラーが発生します! これは私のCOMANDです:Pythonのコマンドラインで後で使用できる一連の数値を生成する方法はありますか?

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を入れて、それはアップロードをお願いする場合されexpext何(または入力を)これは:

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

これで私のコマンドを実行します!

+2

あなたはPythonでBashシェルスクリプト構文と思われるものを混乱させています... – AKX

+0

bash構文とpythonを混在させていますか? – mouad

+0

そうだと思います!それがうまくいかない理由ですどのように私はこれをPythonで行うことができますか? – mahmood

答えて

2

は、おそらくこのような何かをしたい:

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. 
+0

@mahmood:これはあなたが望むものを得るためのPythonの方法のようです。もしあなたが本当にPythonからBashコマンドを実行したいなら、 'os.system(command)'や 'subprocess 'を使うことができます。popen(コマンド) 'などがあります(必要な場合は例としてGoogleを参照してください)。 – heltonbiker

+0

ありがとう!いいえ、私はPythonを使いたがっていましたが、私はそれを私の古いbashコマンドと混ぜました!それが私が望んでいた答えのおかげで – mahmood

0

あなたはPythonプログラムでbash構文を使用しようとしています。彼らは異なる言語です。たとえば、seqコマンドはxrange(...)コマンドでなければなりません。また、Pythonの可変構文ではなく、bash変数構文$somevarも使用しています。

だから、bashを使うか、Pythonを使うのですが、混じってマッチさせないでください。

また、ユーザーにコマンドラインでファイル名を入力させるのではなく、コマンドラインでそのファイル名を指定させることを検討してください。それは後でビルディングブロックとしてスクリプトをより便利にします。

1

あなたはPythonをbashスクリプトと混在させているようです。 raw_inputはPythonですが、スクリプト内のその他のものはすべてbashです。

Pythonですべてのものを書き直そうとするのではなく、おそらくraw_inputの代わりにreadコマンドでbashを使用する必要があるようです。

+0

私は@DanielRosemanに同意しますが、これはPythonを学ぶ機会があることを除けば、いくつかのタスク(ただしすべてのタスクではありません)よりも強力です。実際、Linuxシステムでは、PythonとBash THE RIGHT WAYを混在させることは、簡単で簡単な作業を簡単かつ迅速に実行するための非常に強力な方法です。 – heltonbiker

+0

はい私は間違いを理解しています!私はPythonで記述したいと思います。とにかくありがとう。 – mahmood

0

あなたのfor -lineことではないのPythonコード、それはbash -shellsで使用のための文です。

何がやりたいことは、このにするためにライン書き換えるようにされています。また、あなたは彼らがあまりにもbashの構文であるため、同様に他の行を書き換える必要があります

for cnt in range(1, readnumber): 

関連する問題