如何使用c#

时间:2017-09-07 22:11:13

标签: c# python python-2.7

我正在使用C#工具调用python脚本。我的代码基于this post。我使用ProcessStartInfo启动python并传递一个.py文件和一些参数。当.py,CreateAssessorMap.py文件在c驱动器上但在映射的网络驱动器上时,代码运行正常。没有抛出错误,但据我所知,没有执行python代码。如果我从命令行手动执行相同的操作,它运行正常。

第一个procStartInfo.Arguments下面的代码将失败,因为CreateAssessorMap.py位于网络驱动器上。当脚本在C盘上时,它下面的注释掉的行就可以了。

    private void btnPrint_Click(object sender, EventArgs e)
    {
        try
        {
            ProcessStartInfo procStartInfo = new ProcessStartInfo();
            procStartInfo.FileName = "python"; 
            procStartInfo.Arguments = string.Format("{0} {1} {2}", @"D:\Map_Generate_Scripts\CreateAssessorMap.py", this.txtSheet.Text, txtDestinationFolder.Text);
            //procStartInfo.Arguments = string.Format("{0} {1} {2} ",  @"C:\Projects\Map_Generate_Scripts\CreateAssessorMap.py", this.txtSheet.Text, txtDestinationFolder.Text);
            procStartInfo.UserName = null;
            procStartInfo.UseShellExecute = false;
            procStartInfo.RedirectStandardOutput = true;

            // Do not create the black window.
            procStartInfo.CreateNoWindow = true;

            // Now you create a process, assign its ProcessStartInfo, and start it.
            using (Process process = Process.Start(procStartInfo))
            {
                using (System.IO.StreamReader reader = process.StandardOutput)
                {
                    string result = reader.ReadToEnd();
                    Console.Write(result);
                }
            }
        }
        catch (Exception ecpt)
        {
            Console.WriteLine(ecpt.Message);
        }
        this.Parent.Hide();
    }

修改 我添加了一些错误处理,并且python代码失败,并显示无法找到.py文件的消息。

python: can't open file 'D:\Map_Generate_Scripts\CreateAssessorMapCreateAssessorMap.py': [Errno 2] No such file or directory

我知道它存在,因为我可以使用相同的参数从命令行运行该文件。因此,当我从C#运行时,python进程无法找到d驱动器。

2 个答案:

答案 0 :(得分:0)

我认为当它从网络驱动器运行时需要更长时间,程序不会等待Python脚本的完成。我建议在读取输出流之前添加proces.Wait()。

答案 1 :(得分:0)

正如评论中所述,Dowlers的解决方案是使用完整路径而不是映射网络驱动器。

更改

@"D:\Map_Generate_Scripts\CreateAssessorMap.py"

@"\\[network path]\Map_Generate_Scripts\CreateAssessorMap.py"