将两个参数(日期)从C#传递给python脚本

时间:2016-06-23 13:08:37

标签: c# python

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

这是我捕获参数并将它们传递给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();
        }
    }
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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;

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