2016-06-23 9 views
0

私はC#を使ってフォームを作成するためにVisual Studio 12を使用しています。私はC#からPythonに1つの引数を渡すことに成功しています。私は鉄のpythonを使用していません。私が取り組んでいる新しいアプリケーションは、Pythonに2つの引数を渡す必要があります。両方の引数は、ユーザーが選択した日付です。 enter image description hereC#からPythonスクリプトに2つの引数(日付)を渡す

これは私のコードで、引数を取得してPythonに渡します。何が起こる

private void button1_Click(object sender, EventArgs e) 
    { 
     dbegin = PublicVars.g_begindate; 
     dend = PublicVars.g_enddate; 

     CallPython python = new CallPython(@"C:\Python27\ArcGIS10.3\python.exe"); 
      python.Run_Script(@"\\gisdb01\gis\tools\Python\TA_Report\Update_4_Road.pyc", dbegin dend); 

     this.Close(); 
    } 

    private void dateTimePickerBegin_ValueChanged(object sender, EventArgs e) 
    { 
     PublicVars.g_begindate = dateTimePickerBegin.Text; 
    } 

    private void dateTimePickerEnd_ValueChanged(object sender, EventArgs e) 
    { 
     PublicVars.g_enddate = dateTimePickerEnd.Text; 

は、エラーのハイライト 'DEND' で、私 ")がを期待" を与えます。私はdbeginとdendの間にカンマと)を追加しようとしましたが、これを動作させるようには見えません。

これは私は、Pythonを呼び出すために使用するコードです:

namespace Advisory_Application 
{ 
    class CallPython 
    { 
     string pythonLocationString; 
     public CallPython(string pythonLocation) 
     { 
      pythonLocationString = pythonLocation; 
     } 

     public void Run_Script(string scriptPathName, string arguments) 
     { 
      int ExitCode; 
      ProcessStartInfo processStartInfo = new ProcessStartInfo(); 
      processStartInfo.FileName = pythonLocationString; 
      processStartInfo.Arguments = scriptPathName; 
      processStartInfo.UseShellExecute = false; 
      processStartInfo.RedirectStandardOutput = true; 
      processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      processStartInfo.CreateNoWindow = true; 
      Process updateProcess = Process.Start(processStartInfo); 
      updateProcess.WaitForExit(); 
      ExitCode = updateProcess.ExitCode; 
      updateProcess.Close(); 
     } 
    } 
} 

任意の助けをいただければ幸いです。

答えて

1

私はparams修飾子と引数の配列を受け入れるようにRunScriptを変更すると思います。

public void Run_Script(string scriptPathName, params object[] arguments) 

は、そのように、それはスクリプト名と、あなたがそれに渡すパラメータが含まれます。この

processStartInfo.Arguments = scriptPathName + " " + string.Join(" ", arguments); 

にこのライン

processStartInfo.Arguments = scriptPathName; 

を変更します。 はその後paramsが希望としてあなただけのように多くのパラメータをオフに一覧表示できることを意味します(このようにそれを呼び出す。

python.Run_Script(@"\\gisdb01\gis\tools\Python\TA_Report\Update_4_Road.pyc", dbegin, dend); 
+0

これは素晴らしい仕事を、C#でのエラーはありません! –

0

問題は、1つのパラメータで2つの変数を渡していることです。あなたの関数がより多くのパラメータを受け入れるならば、それらの間に単純なカンマを追加することができます。

CallPython python = new CallPython(@"C:\Python27\ArcGIS10.3\python.exe"); 
      python.Run_Script(@"\\gisdb01\gis\tools\Python\TA_Report\Update_4_Road.pyc", dbegin, dend); 

だけつのパラメータを渡すことができれば、私は単一の変数でdbeginとDEND変数を連結することをお勧めし、あなたがそれを必要とする場合、後でPythonの側に二つの異なるVARSに再びそれらを分離。

dbeginとdendが文字列の場合、次のようにすることができます。

dconcatenated = dbegin + dend; 

別のタイプの場合は、それらを文字列に変換してから連結することができます。

関連する問題