0
私はpythonスクリプトでxfoilというコマンドラインを実行しようとしています。私はPython 2.7で最初に書きましたが、後で作業するために3.7で書き直す必要があります。 私がやっていることは、sdtinに書き込むことによって、cliツールxfoilに一連の文字列コマンドを渡すことです。これはpython 2.7でうまく動作しますが、3.6では動作しません。私は両方で終了コード0を取得するので、私はどちらもデバッグすることはできません。ここ2.7から3.6のpythonサブプロセス
は、私が使用していたコードは、
import subprocess as sp
#import os
import shutil
import sys
import string
"""
class Popen(args, bufsize=0, executable=None,
stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=False, shell=False,
cwd=None, env=None, universal_newlines=False,
startupinfo=None, creationflags=0):
"""
xfoilpath = r'/usr/bin/xfoil'
ps = sp.Popen(xfoilpath,
stdin=sp.PIPE,
stdout=sp.PIPE,
stderr=None,
universal_newlines=True, shell=True)
def cmd(cmd):
ps.stdin.write(cmd+'\n')
#ps.stdin.write(bytes(cmd+'\n', 'utf-8'))
'''
out, err = ps.communicate(input="naca 4512")
print (out)
print (err)
#print (ps.poll())
'''
cmd("naca 4512")
cmd("pane")
cmd("oper")
cmd("visc 5e005")
cmd("M 0.2")
cmd("ITER")
cmd("200")
cmd("pacc")
cmd("4512.log")
cmd(" ")
cmd("aseq 0.0 0.0 1.0")
cmd(" ") # escape OPER
cmd("quit") # exit
# resp = ps.stdout.read()
# print "resp:",resp # console ouput for debug
ps.stdout.close()
ps.stdin.close()
ps.wait()
である私は)(popenので引数のすべての組み合わせを試してみましたが、それが動作していない理由を把握することはできません。デバッグ方法に関する提案は非常に役に立ちます。
は、popen.communicate()funtionで動作することがわかりました。 – aram
あなた自身の質問に回答を投稿し、それを受け入れることができます。多分それは将来他の誰かを助けるでしょう。 – bernie