Python subprocess.communicate не может захватить выходные данные из контейнера runc, если не запущен из интерактивного терминала - PullRequest
0 голосов
/ 11 марта 2019

У меня есть скрипт, который запускает подпроцесс и захватывает выходные данные, но он работает только в том случае, если я запускаю его в интерактивной оболочке, но не при запуске из Jenkins.

tst_subscriber = ["timeout", "-s", "KILL", str(timeout),"bash","-c", subsciber_executable]
tst_publisher = ["timeout","-s", "KILL", str(timeout),"bash","-c", publisher_executable]
kill_publisher = lambda process: subprocess.call(['docker-runc', 'delete', pub_name, "-f"])
kill_subscriber = lambda process: subprocess.call(['docker-runc', 'delete', sub_name, "-f"])

test_env = os.environ.copy()
# workaround for buffering problem which causes no captured output for python subprocesses
test_env["PYTHONUNBUFFERED"] = "1"

sub_pro = Popen(tst_subscriber, stdout=subprocess.PIPE, env=test_env)
pub_pro = Popen(tst_publisher, stdout=subprocess.PIPE, env=test_env)

timeout_sub = Timer(timeout, kill_subscriber, [sub_pro])
timeout_pub = Timer(timeout, kill_publisher, [pub_pro])

timeout_sub.start()
timeout_pub.start()
(output, err) = sub_pro.communicate()

print "Subscriber stdout:"
print output
print "Subscriber stderr:"
print err

1 Ответ

0 голосов
/ 11 марта 2019

Из-за нескольких открытых проблем runc # 1965 # 1721 , установка terminal: true в config.json приводит к трудностям с конвейером.Seeting terminal: false решил проблему.

...