Skip to content

Commit

Permalink
Merge b557a86 into master
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions[bot] authored Apr 30, 2021
2 parents 2c03de8 + b557a86 commit c437b8e
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 20 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Editors
__about__.txt
.vscode/
.idea/

Expand Down
2 changes: 1 addition & 1 deletion bgprocess/constants.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.0.5"
__version__ = "1.1.0"
38 changes: 19 additions & 19 deletions bgprocess/process.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import threading
import time
import unittest
from pathlib import Path
from subprocess import Popen
from typing import *

Expand All @@ -19,36 +20,24 @@ class LineWaitingTimeout(Exception):

class BackgroundProcess:

# я создал этот класс с конкретной целью: запускать HTTP-сервер в параллельном процессе, тогда как текущий
# процесс запускает юниттесты.
#
# Пример использования: запускаем приложение и читаем строки, пока не встретим какую-то специальную
#
# with BackgroundProcess(["prog", "-arg1", "-arg2"]) as bp:
# for line in bp.iterLines():
# if something in line:
# break
#
# Важно для понимания принципа: хотя обычно поток это часть процесса, в данном случае, наоборот:
# образно говоря, фоновый процесс Popen работает "внутри" параллельного потока Thread.
#
# Пока процесс не остановлен, работает и поток. Если процесс уже отработал или выкинул ошибку, сначала
# остановится процесс, потом поток.

def __init__(self, args: List[str], term_timeout=1, buffer_output=False,
print_output=False,
add_env: Dict[str, str] = None):
add_env: Dict[str, str] = None,
cwd: str = None):

self._subproc: Optional[Popen] = None

self.cwd = cwd

self.args = args

self.thread = None

self._disposed = False

# чтобы закрыть программу, мы будем отправлять ей сигналы: вежливые и не очень.
# После сигнала мы будем ждать столько секунд, что программа отреагирует:
# чтобы закрыть программу, мы будем отправлять ей сигналы: вежливые и
# не очень. После сигнала мы будем ждать столько секунд, что программа
# отреагирует:
self.termTimeout: float = term_timeout

# self.bufferOutput = self.bufferOutput
Expand All @@ -68,6 +57,7 @@ def __thread_method(self):
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.STDOUT,
cwd=self.cwd,
env=self._env,
close_fds=True)

Expand Down Expand Up @@ -313,6 +303,16 @@ def testWaitLine(self):
with BackgroundProcess(["sleep", "3"]) as bp:
bp.next_line(lambda s: s == "never!", match_timeout=0.25)

def test_cwd_set(self):
for d in [Path(__file__).parent,
Path(__file__).parent.parent / '.github']:
with BackgroundProcess(["pwd"], cwd=str(d)) as bp:
self.assertEqual(bp.next_line(), str(d))

def test_cwd_unset(self):
with BackgroundProcess(["pwd"]) as bp:
self.assertEqual(bp.next_line(), str(Path('.').absolute()))


if __name__ == "__main__":
TestBackgroundProcess().testWaitLine()

0 comments on commit c437b8e

Please # to comment.