Metadata-Version: 2.1
Name: simple-ipc
Version: 1.2.0
Summary: Inter-process communication based on stdio
Home-page: https://github.com/celltec/simple-ipc
Author: Jeremy Peters
Author-email: info.peters@quantentunnel.de
License: UNKNOWN
Project-URL: Source, https://github.com/celltec/simple-ipc/tree/master/src/ipc/worker.py
Keywords: ipc stdio stdin stdout send process program communicate interact transmit transfer communication interaction transmission simple
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Requires-Python: >=2.7, <4
Description-Content-Type: text/markdown

# simple-ipc

#### Inter-process communication based on stdio

[![Python Version](https://img.shields.io/pypi/pyversions/simple-ipc)](https://www.python.org/downloads)
[![Downloads](https://pepy.tech/badge/simple-ipc)](https://pypistats.org/packages/simple-ipc)
[![PyPI Version](https://img.shields.io/pypi/v/simple-ipc)](https://pypi.org/project/simple-ipc)
[![License](https://img.shields.io/github/license/celltec/simple-ipc)](https://opensource.org/licenses/mit-license.php)

A simple python interface for inter-process communication, a way to asynchronously 
exchange data with external programs at runtime. The internal mechanism functions 
by writing data to *stdout* and reading from *stdin* using multi threading. 

## Installation
`pip install simple-ipc`

## Usage
Import the module first:
- `import ipc`
- `from ipc import Worker`

### Parameters
```
Worker(command, callback=None, start=True, verbose=False)
```

- `command` a path to an executable along with optional arguments  
  - **list:** may include spaces 
  - **str:** no support for spaces

- `callback` *(optional)* a function that is called after new data has been received  
  - must take exactly one argument

- `start` *(optional)* start the worker automatically when created

- `verbose` *(optional)* print status messages

#### Examples
```python
worker = Worker(['with space.exe', 'spaced arg'], start=False)
```

```python
with Worker('program.exe', verbose=True) as worker:
    ...
```

```python
Worker('path/to/program.exe arg', lambda data: print(data))
```

### A worker object

All data will be converted to type `str` internally.

#### Methods
- `start()` starts the worker
- `send(data)` sends the data to the external process
- `stop()` initiates the termination of all threads and clears all data

#### Properties
- `running` indicates the status of the worker *(read-only)*
- `data` contains the most recent value *(read-only)*

## Example program
```python
from random import randint
from ipc import Worker

def process(data):
    if int(data) == 5:
        print('Process data...')

worker = Worker('program.exe', process)

while worker.running:
    number = randint(1, 10)
    worker.send(number)
    print(f'Data: {worker.data}')
```

More example code can be found [here](https://github.com/celltec/simple-ipc/tree/master/example).


