Pythonのコマンドラインで後で使用できる一連の数値を生成する方法は?

私がしたいことは、入力としていくつかのファイルを取得し、それらのコマンドを実行するスクリプトを書くことです!私はまず、どれくらいのファイルがユーザーに与えられているのかを知りたいと思って、アップロードするよう依頼して、後でそれについてコマンドを実行したい。 だから、私はこのコマンドを使用しました: cnt の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:

それで私の命令を実行してください!

0
そう、私はそう思う!それがうまくいかない理由ですどのように私はこれをPythonで行うことができますか?
追加された 著者 mahmood,
あなたはPythonとbashの構文をミックスしていますか?
追加された 著者 mouad,
あなたはPythonでBashシェルスクリプトの構文と思われるものを混乱させています...
追加された 著者 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を使いたがっていましたが、私はそれを私の古いbashコマンドと混ぜました!それが私が望んでいた答えのおかげで
追加された 著者 mahmood,
@mahmood:これはあなたが望むものを得るためのPythonの方法のようです。 PythonからBashコマンドを実際に実行したい場合は、 os.system(command) subprocess.popen(command)などを使用できます(Googleの例、 必要であれば)。
追加された 著者 heltonbiker,

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

Pythonですべてのものを書き直そうとするのではなく、raw_inputの代わりに read コマンドを使ってbashを使うだけでよいようです。

1
追加された
はい、私は間違いを理解しています!私はPythonで記述したいと思います。とにかくありがとう。
追加された 著者 mahmood,
私は@DanielRosemanに同意しますが、Pythonを学ぶ機会を得ることを除けば、それはbashよりもいくつかのタスク(ただしすべてのタスクではない)より強力です。実際、Linuxシステムでは、PythonとBash THE RIGHT WAYを混在させることは、簡単で簡単な作業を簡単かつ迅速に実行するための非常に強力な方法です。
追加された 著者 heltonbiker,

Pythonコードではない for - 行は、 bash -shellsで使用されるfor文です。

あなたがしたいのは、for-lineを次のように書き直すことです:

for cnt in range(1, readnumber):

また、他の行もbash-syntaxであるため、書き直す必要があります。

0
追加された

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

ですから、bashを使うか、Pythonを使うのですが、混在させないでください。

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

0
追加された