1

別のファイルからインポートされたパラメータを使用してコマンド ライン プログラムを実行する Python スクリプトを作成しようとしています。プログラムのコマンド ライン インターフェイスは次のように機能します。./executable.x パラメータ(a) パラメータ(b) パラメータ(c) ...

私のコードは次のとおりです。

#program to pass parameters to softsusy
import subprocess
#open parameter file
f = open('test.dat', 'r')
program = './executable.x'
#select line from file and pass to program
for line in f:
    subprocess.Popen([program, line])

test.dat ファイルは次のようになります。

param(a) param(b) param(c)...

スクリプトはプログラムを呼び出しますが、変数は渡しません。私は何が欠けていますか?

4

2 に答える 2

2

あなたがしたい:

line=f.readline()
subprocess.Popen([program]+line.split())

現在持っているものは、行全体を単一の引数としてプログラムに渡します。(シェルで次のように呼び出すようにprogram "arg1 arg2 arg3"

もちろん、ファイルの各行に対してプログラムを 1 回呼び出したい場合は、次のようにします。

with open('test.dat','r') as f:
for line in f:
    #you could use shlex.split(line) as well -- that will preserve quotes, etc.
    subprocess.Popen([program]+line.split())
于 2012-06-01T20:16:15.920 に答える
0

まず、あなたの場合、subprocess.popen() ではなく subprocess.call() を使用してください

「パラメータが渡されていない」に関しては、スクリプトに明らかに問題はありません。全体を長い文字列に連結し、その文字列を list の代わりに .call() に渡してみてください。

subprocess.call( program + " " + " ".join(line) )

line含まれていると予想されるデータが含まれていると確信していますか?

確認するには、(ソース ファイルが短い場合) ファイルを明示的にリストに変換し、「行」にデータがあることを確認してください。

for line in file.readlines():
    if len(line.trim().split(" ")) < 2:
        raise Exception("Where are my params?")
于 2012-06-01T20:24:37.930 に答える