Открыть оболочку в подпроцессе python

У меня есть сценарий, который открывает новую оболочку с условиями, отличными от стандартной оболочки, назовем его ./new_shell <arg>. Мне нужно запустить ./new_shell <arg> в сценарии Python, затем выполнить команды в этой оболочке, затем выйти из оболочки и продолжить выполнение моего сценария как обычно. Как я могу это сделать?

Цель в псевдокоде для справки:

for arg in args:
    subprocess.run(['./new_shell ' + arg], shell=True) #this doesn't behave as I want, because I need the shell to be automated, not manual
    subprocess.run([<various scripts that need to be run within new_shell])
    subprocess.run([<exit_shell>]) #don't know how to do this

Большое спасибо!

Вместо этого вы хотите использовать subprocess.Popen, а затем использовать Popen.communicate для взаимодействия с этим процессом. Вам действительно стоит прочитать всю документацию по модулю subprocess.

Patrick Haugh 10.08.2018 17:34

Спасибо! Я прочитал это, и это определенно то, что я хочу. К сожалению, я не могу заставить его работать /:

K. Dackow 10.08.2018 18:07

Я подозреваю, что вы хотите по сути открыть оболочку bash, затем выполнить в ней кучу команд, а затем снова закрыть? Возможно, вы захотите просто использовать Python для запуска всех этих процессов и управления их взаимодействием. Не могли бы вы рассказать, чем конкретно вы пытаетесь заниматься, или хотя бы наглядным примером?

Patrick Haugh 10.08.2018 19:50
0
3
802
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мое решение заключалось в использовании Popen следующим образом:

for arg in args:
    pro = subprocess.Popen(['new_shell', arg],
                           stdin=subprocess.PIPE,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE)
    inpt = <script_to_be_run_in_shell> + <arguments> +'\n'
    out, err = pro.communicate(inpt.encode())

Другие вопросы по теме