Стандартный вывод в bash заблокирован строкой кода - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть скрипт bash, в котором я вызываю скрипт python:

#!/bin/bash
python myscript.py

В скрипте python я использую пакет selenium для очистки:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
print('starting')
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
browser = webdriver.Chrome("/chromedriver",chrome_options=chrome_options)
url = "https://example.com"
browser.get(url)
...

Я быкак запустить скрипт bash и получить вывод на консоль и в файл журнала:

./bash_script.sh 2>&1 | tee log.txt

Моя проблема заключается в том, что эта команда никогда не печатает ожидаемое сообщение «запуск» (или любое другое print вскрипт python), хотя скрипт python действительно выполняется.

НО:

  1. Если я удалю команду browser.get(url), она будет работать
  2. Если я позвонюнепосредственно сценарий python (не через скрипт bash), он работает
  3. Если я не перенаправляю вывод и просто вызываю ./bash_script.sh, он работает

, поэтому он выглядитесть странное взаимодействие между перенаправлением bash и этой конкретной строкой кода browser.get(url)

Есть идеи, почему и как я могу это исправить?

1 Ответ

0 голосов
/ 26 февраля 2019

Проблема с буферизацией?Когда ваш скрипт на python заканчивается, вывод вообще не выводится?

Если это проблема буферизации, stdbuf может помочь:

stdbuf -oL ./bash_script.sh 2>&1 | tee log.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...