@dawasaturday

Как поймать код выполнения команды, посланной в python-скрипте в sh через subprocess?

имея код на баше:
TIME=0
  sh -c "${команда, которую я выполняю}" > /dev/null 2>&1
  while test $? -ne 0 -a ${TIME} -lt ${TIMEOUT}
  do
    sleep 1
    TIME=`expr ${TIME} + 1`
    sh -c "${команда, которую я выполняю}" > /dev/null 2>&1
  done
  return $?

пытаюсь понять, как реализовать этот кусок на python.
ок, пишу
T=0
subprocess.run(['sh',  'команда, которую я выполняю'], stdout=subprocess.PIPE)

и что-то у меня дальше ступор совсем. Я думала как-то выцепить результат выполнения той команды, которую я посылаю в sh, как переменную. (0 или 1, как переменная $?, которую я могу юзать в shell ), но не имею представления, можно ли это сделать и как, если да.
куда смотреть?
  • Вопрос задан
  • 636 просмотров
Решения вопроса 2
@javedimka
Хочу сока
returncode = subprocess.run(['sh',  'команда, которую я выполняю'], stdout=subprocess.PIPE).returncode
print(returncode)

https://docs.python.org/3/library/subprocess.html
class subprocess.CompletedProcess
И, возможно, тебе стоит запускать subprocess.run() с аргументом shell=True
Ответ написан
Комментировать
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
import subprocess, os
from time import sleep
T = 0
timeout = int(os.environ['TIMEOUT'])
process = subprocess.Popen(['команда, которую я выполняю'], stdout=subprocess.PIPE, shell=True)
while process.poll() is None and timeout > T:
    T += 1
    sleep(1)

'''processExitCode = process.returncode'''

poll() проверяет завершение процесса и при наличии возвращает exit code.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sanya84
@sanya84
Фанатик Python 3
Вот то что вам нужно
import subprocess

p = subprocess.Popen('sh ',  shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate('echo "Hello!"'.encode())
print(out.decode('cp866'),err.decode('cp866'))


p.wait()
input()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы