Python Подпроцесс: отправка последовательности команд процессу в зависимости от вывода предыдущей команды - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь выполнить последовательность команд с программой xfoil .

Я дошел до того, что получил все команды, которые отправляю, чтобы это можно было загружается напрямую, без контроля в xfoil с перенаправлением ввода, например: "xfoil

load sd7032.dat   
oper  
iter 100   
type 2  
visc 100000  
alfa 0.0  
dump target_sd7032_alfa_0.0_Re_100000_Type2.dmp  

С помощью подпроцесса или другими способами, есть ли способ отправить мне одну команду за раз, например, вывод первой команды загрузки проверяется перед отправкой второй?

желательно с чем-то похожим на:

ps = sp.Popen(['xfoil.exe'], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
for command in commdand_list:
    ps.stdin.write(cmd+'\n')

1 Ответ

0 голосов
/ 02 апреля 2020

Вы можете попробовать следующее:

import subprocess
for command in command_list:
    res = subprocess.run(f'xfoil {command}', shell=True, capture_output=True)
    print(f"return code is: {res.returncode}")
    print(f"stdout is: {res.stdout}")
    print(f"stderr is: {res.stderr}")

, если вы хотите потерпеть неудачу в l oop, если указанная команда c не удалась, вы можете добавить check=True в качестве параметра к subprocess.run(...,check=True) function.

Кроме того, если xfoil работает только из указанного каталога c, вы можете cwd="path/to/run" до subprocess.run().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...