2016-06-23 2 views
0

Visual Studio 12를 사용하여 C#을 사용하는 양식을 만듭니다. 저는 C#에서 파이썬으로 하나의 인수를 전달하는 데 성공했습니다. Iron python을 사용하지 않습니다. 내가 작업하고있는 새로운 응용 프로그램은 파이썬에 두 개의 인수를 전달해야합니다. 두 인수는 사용자가 선택한 날짜입니다. enter image description hereC#에서 파이썬 스크립트로 두 개의 인수 (날짜) 전달

이것은 인수를 포착하여 파이썬에 전달하는 코드입니다. 어떻게됩니까

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 사이에 쉼표와 쉼표를 추가하려고 시도했으나 작동하지 않는 것처럼 보입니다. 어떤 도움을 주시면 감사하겠습니다

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

문제는 두 변수를 하나의 매개 변수로 전달한다는 것입니다. 함수가 더 많은 매개 변수를 받아들이면 간단한 쉼표를 그 사이에 추가 할 수 있습니다.

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 변수를 연결하는 제안하고 당신이 그것을 필요로하는 경우에 나중에 파이썬 측면에 두 개의 서로 다른 바르에서 다시 분리한다.

dbegin과 dend가 문자열 인 경우 다음과 같이 할 수 있습니다.

dconcatenated = dbegin + dend; 

다른 유형 인 경우 문자열로 변환 한 다음 연결할 수 있습니다.