Python script call from c #

I have C # code that helps to start the python environment first and then it runs my python process. But the problem is that it takes a long time to complete.

Actually, I just want to pass my values ​​and execute one line of code in a python script. But you need to execute all the python code every time. Is there a way to start a python process and just run a single line whenever I want.

I attached c # code and python process with this

C # code

public String  Insert(float[] values)

        {
            // full path of python interpreter
            string python = @"C:\ProgramData\Anaconda2\python.exe";

            // python app to call
            string myPythonApp = @"C:\classification.py";

            // dummy parameters to send Python script 
            //int x = 2;
            //int y = 5;

            // Create new process start info
            ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(python);

            // make sure we can read the output from stdout
            myProcessStartInfo.UseShellExecute = false;
            myProcessStartInfo.RedirectStandardOutput = true;
            myProcessStartInfo.CreateNoWindow = true;
            myProcessStartInfo.WindowStyle = ProcessWindowStyle.Minimized;

            // start python app with 3 arguments 
            // 1st arguments is pointer to itself, 2nd and 3rd are actual arguments we want to send
            myProcessStartInfo.Arguments = myPythonApp + " " + values[0] + " " + values[1] + " " + values[2] + " " + values[3] + " " + values[4] + " " + values[5];

            Process myProcess = new Process();
            // assign start information to the process
            myProcess.StartInfo = myProcessStartInfo;


            myProcess.Start();

            // Read the standard output of the app we called. 
            // in order to avoid deadlock we will read output first and then wait for process terminate:
            StreamReader myStreamReader = myProcess.StandardOutput;
            string myString = myStreamReader.ReadLine();

            /*if you need to read multiple lines, you might use:
                string myString = myStreamReader.ReadToEnd() */

            // wait exit signal from the app we called and then close it.
            myProcess.WaitForExit();

            myProcess.Close();

            // write the output we got from python app
            Console.WriteLine("Value received from script: " + myString);
            Console.WriteLine("Value received from script: " + myString);

And python script

import numpy as np
import sys

val1 = float(sys.argv[1]) 
val2 = float(sys.argv[2]) 
val3 = float(sys.argv[3]) 
val4 = float(sys.argv[4]) 
val5 = float(sys.argv[5]) 
val6 = float(sys.argv[6]) 



# Load dataset
url = "F:\FINAL YEAR PROJECT\Amila\data2.csv"
names = ['JawLower', 'BrowLower', 'BrowRaiser', 'LipCornerDepressor', 'LipRaiser','LipStretcher','Emotion_Id']
dataset = pandas.read_csv(url, names=names)

# shape
# print(dataset.shape)


# class distribution
# print(dataset.groupby('Emotion_Id').size())


# Split-out validation dataset
array = dataset.values
X = array[:,0:6]
Y = array[:,6]
neigh = KNeighborsClassifier(n_neighbors=3)


neigh.fit(X, Y) 

print(neigh.predict([[val1,val2,val3,val4,val5,val6]]))

print (neigh.predict ([[val1, val2, val3, val4, val5, val6]])) is a line of code that I want to execute separately.

+4
source share
3 answers

REST API python #. : CPickle flask

, , python 3.5

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
import pickle
from flask import Flask, abort, jsonify, request
import numpy as np
import json

app = Flask(__name__)

@app.route('/api/create', methods=['GET'])

def create_model():
    iris = datasets.load_iris()
    x = iris.data
    y = iris.target
    model = RandomForestClassifier(n_estimators=100, n_jobs=2)
    model.fit(x, y)
    pickle.dump(model, open("iris_model.pkl", "wb"))
    return "done"


def default(o):
    if isinstance(o, np.integer):
        return int(o)
    raise TypeError


@app.route('/api/predict', methods=['POST'])
def make_predict():
    my_rfm = pickle.load(open("iris_model.pkl", "rb"))
    data = request.get_json(force=True)
    predict_request = [data['sl'], data['sw'], data['pl'], data['pw']]
    predict_request = np.array(predict_request)
    output = my_rfm.predict(predict_request)[0]
    return json.dumps({'result': np.int32(output)}, default=default)


if __name__ == '__main__':
    app.run(port=8000, debug=True)

: enter image description here

+2
0

Python #? Python?

, , http://accord-framework.net/

Also try also my project: deepakkumar1984 / SiaNet ( https://github.com/deepakkumar1984/SiaNet ) Its a C # shell with a CNTK database. Trying to implement keras as a wrapper. Hope this helps!

0
source

Source: https://habr.com/ru/post/1678331/


All Articles