Python Language
C # से अजगर को बुलाओ
खोज…
परिचय
प्रलेखन सी # और पायथन लिपियों के बीच अंतर-प्रक्रिया संचार का एक नमूना कार्यान्वयन प्रदान करता है।
टिप्पणियों
ध्यान दें कि डेटा के ऊपर के उदाहरण में MongoDB.Bson लाइब्रेरी का उपयोग करके क्रमबद्ध किया गया है जिसे NuGet प्रबंधक के माध्यम से स्थापित किया जा सकता है।
अन्यथा, आप अपनी पसंद के किसी JSON क्रमांकन लाइब्रेरी का उपयोग कर सकते हैं।
नीचे अंतर-प्रक्रिया संचार कार्यान्वयन चरण हैं:
इनपुट तर्क JSON स्ट्रिंग में क्रमबद्ध हैं और एक अस्थायी पाठ फ़ाइल में सहेजे गए हैं:
BsonDocument argsBson = BsonDocument.Parse("{ 'x' : '1', 'y' : '2' }"); string argsFile = string.Format("{0}\\{1}.txt", Path.GetDirectoryName(pyScriptPath), Guid.NewGuid());
पायथन इंटरप्रेटर python.exe पायथन स्क्रिप्ट चलाता है जो अस्थायी पाठ फ़ाइल से JSON स्ट्रिंग पढ़ता है और इनपुट तर्कों का समर्थन करता है:
filename = sys.argv[ 1 ] with open( filename ) as data_file: input_args = json.loads( data_file.read() ) x, y = [ float(input_args.get( key )) for key in [ 'x', 'y' ] ]
पायथन लिपि को निष्पादित किया जाता है और आउटपुट डिक्शनरी को JSON स्ट्रिंग में क्रमबद्ध किया जाता है और कमांड विंडो पर प्रिंट किया जाता है:
print json.dumps( { 'sum' : x + y , 'subtract' : x - y } )
C # एप्लिकेशन से आउटपुट JSON स्ट्रिंग पढ़ें:
using (StreamReader myStreamReader = process.StandardOutput) { outputString = myStreamReader.ReadLine(); process.WaitForExit(); }
मैं अपनी एक परियोजना में C # और पायथन स्क्रिप्ट के बीच अंतर-प्रक्रिया संचार का उपयोग कर रहा हूं, जो Excel स्प्रेडशीट से सीधे पायथन स्क्रिप्ट को कॉल करने की अनुमति देता है।
प्रोजेक्ट C # - Excel बाइंडिंग के लिए ExcelDNA ऐड-इन का उपयोग करता है।
स्रोत-कोड GitHub रिपॉजिटरी में संग्रहीत है ।
नीचे विकी पृष्ठों के लिंक दिए गए हैं जो परियोजना का अवलोकन प्रदान करते हैं और 4 आसान चरणों में आरंभ करने में मदद करते हैं ।
मुझे आशा है कि आपको उदाहरण और परियोजना उपयोगी होगी।
पायथन लिपि जिसे C # एप्लिकेशन द्वारा बुलाया जाना है
import sys
import json
# load input arguments from the text file
filename = sys.argv[ 1 ]
with open( filename ) as data_file:
input_args = json.loads( data_file.read() )
# cast strings to floats
x, y = [ float(input_args.get( key )) for key in [ 'x', 'y' ] ]
print json.dumps( { 'sum' : x + y , 'subtract' : x - y } )
पायथन स्क्रिप्ट को कॉल करने वाला C # कोड
using MongoDB.Bson;
using System;
using System.Diagnostics;
using System.IO;
namespace python_csharp
{
class Program
{
static void Main(string[] args)
{
// full path to .py file
string pyScriptPath = "...../sum.py";
// convert input arguments to JSON string
BsonDocument argsBson = BsonDocument.Parse("{ 'x' : '1', 'y' : '2' }");
bool saveInputFile = false;
string argsFile = string.Format("{0}\\{1}.txt", Path.GetDirectoryName(pyScriptPath), Guid.NewGuid());
string outputString = null;
// create new process start info
ProcessStartInfo prcStartInfo = new ProcessStartInfo
{
// full path of the Python interpreter 'python.exe'
FileName = "python.exe", // string.Format(@"""{0}""", "python.exe"),
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = false
};
try
{
// write input arguments to .txt file
using (StreamWriter sw = new StreamWriter(argsFile))
{
sw.WriteLine(argsBson);
prcStartInfo.Arguments = string.Format("{0} {1}", string.Format(@"""{0}""", pyScriptPath), string.Format(@"""{0}""", argsFile));
}
// start process
using (Process process = Process.Start(prcStartInfo))
{
// read standard output JSON string
using (StreamReader myStreamReader = process.StandardOutput)
{
outputString = myStreamReader.ReadLine();
process.WaitForExit();
}
}
}
finally
{
// delete/save temporary .txt file
if (!saveInputFile)
{
File.Delete(argsFile);
}
}
Console.WriteLine(outputString);
}
}
}