我正在使用Visual Studio 12来创建使用C#的表单。我成功地将一个参数从C#传递给了python。我没有使用Iron python。我正在处理的新应用程序需要将两个参数传递给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();
}
}
}
任何帮助都将不胜感激。
答案 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;
如果它们是另一种类型,你可以将它们转换为字符串,然后将它们连接起来。