0
我想運行一個命令行,通過python腳本調用xfoil。我首先在python 2.7中編寫它,但爲了以後的工作,我需要在3.7中重寫它。 我正在做的是,通過寫入sdtin將一串字符串命令傳遞給cli工具xfoil。這適用於python 2.7,但不適用於3.6。我在兩個都得到退出代碼0,所以我也無法調試。從2.7到3.6的python子進程
這裏是我使用我試圖與POPEN(的參數全部組合)的代碼,
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.communicate()函數一起使用。 – aram
您可以發佈自己的問題的答案並接受它。也許它會在未來幫助別人。 – bernie