関連データを含む文字列は、Popen 関数と stdout を介してサブプロセスから送信されます。
run = subprocess.Popen('evo -x "' + folder+filename+'"', stdout = subprocess.PIPE, stderr = subprocess.PIPE, env={'LANG':'C++'})
data, error = run.communicate()
関連情報を出力する文字列は次のようになります。
printf "height= %.15f \ntilt = %.15f (%.15f)\ncen_volume= %.15f\nr_volume= %.15f\n", height, abs(sin(tilt*pi/180)*ring_OR), abs(tilt), c_vol, r_vol;
そしてコンソールにprint data
譲ります(stdoutにもあるいくつかの追加のものがあります):
Evolver 2.40, May 8, 2072; Windows OpenGL, 32-bit
Converting to all named quantities...Done.
Enter command: QUIET
height= 0.000211813357854
tilt=0.0 (0.0)
cen_volume= 0.000000000600000
r_volume= 0.000000003000000
bad
私はそれを一致させます:
dat = re.match("[\s]*height\s*=\s*([-]?[\.\d]*)[\s]*tilt\s*=\s*([-]?[\.\d]*)[\s]*\(([\s]*[-]?[\.\d]*)\)[\s]*cen_volume\s*=\s*([-]?[\.\d]*)[\s]*r_volume\s*=\s*([-]?[\.\d]*)[\s]*", data)
ただし、これは「なし」を返しています。このまったく同じ .match は、stdout ではなく txt ファイルから読み込まれた後にまったく同じ情報に一致するプログラムで使用され、その場合は完全に機能します。文字列が通信を介して取得されたときに、文字列の処理方法に異常があるか、または異常な余分な非表示文字が追加されていますか? .findall は matching に対して完全に正常に機能しre.findall("[\s]*(bad)[\s]*", data)
ますが、.match を使用して 1 行だけを一致させようとしても失敗することに注意してください。