# General 
epew (ExternalProgramExecutionWrapper) is a tool to wrap program-calls with some useful functions.
Important: epew is not ready for usage yet.
## Features
epew is a commandline-tool. There is no gui. The main-advantage of epew is to be used when
- it is difficult to pass special characters (backslashs, quotes, etc.) from commandline to another program (use epew with the `--ArgumentIsBase64Encoded`-switch).
- it is difficult to get stdout, stderr or the exitcode of the program (use epew with the `--StdOutFile`- or `--StdErrFile`- or `--ExitCodeFile`-switch).
- you want to have a simple timeout when running a program (use epew with the `--TimeoutInMilliseconds`-switch).
- you want to print the output to the console but also log the output into a file when running a program. Both (console and logfile) can of course have timestamps and a distinction between stderr and stdout.
Other features:
- epew is available for Linux and Windows.
- epew resolves environment-variables (e. g. you can set `git` as program instead of `C:\Program Files\Git\cmd\git.exe` (which would also be possible)).
## Get epew
### Installation via pip (Linux and Windows)
```
pip install epew
```
pip requires [Python](https://www.python.org) 3.8.
See the [pypi-site of epew](https://pypi.org/project/epew) for more information.
### Download sourcecode using git (Linux and Windows)
```
git clone https://github.com/anionDev/externalProgramExecutionWrapper
cd externalProgramExecutionWrapper
dotnet build ExternalProgramExecutionWrapper.sln
```
### Installation via winget (Windows, planned)
Coming as soon as possible. winget is new for all of us, that's why epew is not instant available via winget.
### Usage
```
>epew
-p, --Program Required. Program which should be executed
-a, --Argument Argument for the program which should be
executed
-b, --ArgumentIsBase64Encoded (Default: false) Specifiy whether Argument
is base64-encoded
-w, --Workingdirectory Workingdirectory for the program which
should be executed
-v, --Verbosity (Default: Normal) Verbosity of
ExternalProgramExecutionWrapper
-i, --PrintErrorsAsInformation (Default: false) Treat errors as information
-h, --AddLogOverhead (Default: false) Add log overhead
-l, --LogFile Logfile for ExternalProgramExecutionWrapper
-o, --StdOutFile File for the stdout of the executed program
-e, --StdErrFile File for the stderr of the executed program
-x, --ExitCodeFile File for the exitcode of the executed
program
-d, --TimeoutInMilliseconds (Default: 2147483647) Maximal duration of
the execution process before it will by
aborted by ExternalProgramExecutionWrapper
-t, --Title Title for the execution-process
-n, --NotSynchronous (Default: false) Run the program
asynchronously
--help Display this help screen.
--version Display version information.
```
Exitcodes:
2147393801: If no program was executed
2147393802: If a fatal error occurred
2147393803: If the executed program was aborted due to the given timeout
2147393881: If executed on MacOS (applies only to the pip-package)
2147393882: If executed on an unknown OS (applies only to the pip-package)
2147393883: If an (unexpected) exception occurred (applies only to the pip-package)
If the executed program terminated then its exitcode will be set as exitcode of epew.
## Technical details
### The pip-package
Installing epew via pip does really install epew. It does not install another implementation of epew with same behavior. The pip-package of epew takes the binary-files of epew (which are written in C# and compiled for the [runtimes](https://docs.microsoft.com/en-us/dotnet/core/rid-catalog) `win-x64` and `linux-x64`), wraps them to a bundle and simple calls the correct one dependent on your OS.
### Strong name
The officially released `epew.dll`-file is always signed with the key with the short-id `79cae7246084aa22`. Do not trust any `epew.dll`-file which are not signed with this key.
Only `epew.dll` will be signed with this key. All other files contained in a binary-release of epew are not signed by this key.
You can verify the key using [sn](https://docs.microsoft.com/en-us/dotnet/framework/tools/sn-exe-strong-name-tool) with `sn -T epew.dll`.
## License
epew is licensed under the terms of MIT. The concrete license-text can be found [here](https://raw.githubusercontent.com/anionDev/externalProgramExecutionWrapper/master/License.txt).