2016-06-23 56 views
0

我使用Visual Studio 12使用C#创建表单。我已经成功地将C#中的一个参数传递给python。我没有使用Iron python。我正在处理的新应用程序需要将两个参数传递给python。这两个参数都是用户选择的日期。 enter image description here将C#中的两个参数(日期)传递给python脚本

这是我的代码来捕获参数并将它们传递给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

我会更改RunScript以接受params修饰符的参数数组。

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

,这一行

processStartInfo.Arguments = scriptPathName; 

改变这种

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

因此,这将包括脚本名称和要传递给它的参数。 然后调用它像这样(的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变量,以及后来在Python端他们又在两个不同的瓦尔分开,如果你需要它。

如果dbegin和dend是字符串,您可以按如下方式进行操作。

dconcatenated = dbegin + dend; 

如果它们是另一种类型,则可以将它们转换为字符串,然后将它们连接起来。