0

OK、この投稿で Python 内で複雑なコマンドを実行する方法を見つけました。 Python スクリプトで独自の外部コマンドを実行する方法

import shlex
import subprocess
proc = subprocess.Popen(shlex.split('gr_cp -option=90 inputfilename outputfilename'))
proc.communicate()

それは実際に機能しますが、私の場合、ループと名前のinputfilename変更outputfilenameを繰り返し実行しています。私はその解決策を試しましたが、認識しないため機能しませんinputfilename

In the loop は、が1 から 21 までのループで実行されているinputfilename場所mbr{:03}_20161110.grb1.format(i)です。i

ありがとうございました。

編集:要求に応じて、ここでループがどのようになるかを示します。

for i in range(1, 21):
    dn = './mbr{:03}'.format(i)
    inputfilename = 'mbr{:03}_2016111000.grb1'.format(i) 
    os.chdir(dn)
    #do some things copying and concatenating files
    proc = subprocess.Popen(shlex.split('gr_cp -option=90 inputfilename outfilename'))
    proc.communicate()
    os.chdir('..')

ループはディレクトリmbr001を探索し、各親ディレクトリとしてmbr020名前を付けます。inputfile

gr_cp は、(フィルターのように)inputfilenameからいくつかの変数を抽出するコマンド ライン ツールです。outputfilename他のシェルコマンドと同じです。問題は、ループ内で識別されないことinputfilenameです。

4

1 に答える 1

1

inputfilenameループ内でとoutputfilenameが (それぞれ) 入力ファイルと出力ファイルの名前を保持する 2 つの変数であると仮定すると、次のようにします。

proc = subprocess.Popen(shlex.split('gr_cp -option=90') + [ inputfilename, outputfilename ])

(の出力はshlex.split文字列のリストであるため、リストの最後のメンバーを追加するだけです...)

于 2016-11-14T16:59:24.560 に答える