खोज…


परिचय

प्रलेखन सी # और पायथन लिपियों के बीच अंतर-प्रक्रिया संचार का एक नमूना कार्यान्वयन प्रदान करता है।

टिप्पणियों

ध्यान दें कि डेटा के ऊपर के उदाहरण में 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);
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow