我正在使用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驱动器。
答案 0 :(得分:0)
我认为当它从网络驱动器运行时需要更长时间,程序不会等待Python脚本的完成。我建议在读取输出流之前添加proces.Wait()。
答案 1 :(得分:0)
正如评论中所述,Dowlers的解决方案是使用完整路径而不是映射网络驱动器。
更改
@"D:\Map_Generate_Scripts\CreateAssessorMap.py"
要
@"\\[network path]\Map_Generate_Scripts\CreateAssessorMap.py"