1. 程式人生 > >在C#中呼叫python指令碼,並使用python第三方arcpy模組

在C#中呼叫python指令碼,並使用python第三方arcpy模組

前言 1、C#中呼叫python指令碼,一是通過ironpython直接執行python指令碼,二是通過呼叫Process類啟動電腦上的python.exe,執行python指令碼。 前者在使用第三方arcpy模組式,會提示錯誤:No Module Named arcpy,網上的解決方案是在python指令碼中通過sys.appendpath新增arpy路徑,但是又會提示新的錯誤:No Module Named arcgisscripting......未解決,所以本文采用第二種方式 以arcgis merge功能為例 (1)新建c#窗體應用
(2)窗體介面如圖:
(3)button2點選事件程式碼:
private void button2_Click(object sender, EventArgs e) { OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.Multiselect = true; fileDialog.Title = "輸入資料集"; fileDialog.Filter = "shapefiles(*.shp)|*.shp|All files(*.*)|*.*";//過濾檔案型別 if (fileDialog.ShowDialog() == DialogResult.OK) { string[] names = fileDialog.FileNames; int flag = 0; foreach (string file in names) { MessageBox.Show("已選擇檔案:" + file, "選擇檔案提示", MessageBoxButtons.OK, MessageBoxIcon.Information); if(flag==0) textBox5.Text="F:\\data\\output\\merge.shp";//設定預設儲存路徑 textBox3.AppendText(file+"\n"); } } } (4)button1點選事件程式碼
private void button1_Click(object sender, EventArgs e) { string arg1_ = textBox3.Text;//獲取引數arg1[](待合併圖層集合) string[] arg1 = arg1_.Split('\r', '\n'); string arg2 = textBox5.Text;//arg2(輸出圖層) List<string> listArr = arg1.ToList(); listArr.Add(arg2); string[] strArr = listArr.ToArray(); //引數列表,需要傳遞的引數 string sArguments = @"merge.py";//這裡是python的檔名字 RunPythonScript(sArguments, "-u", strArr);//執行指令碼檔案 } public static void RunPythonScript(string sArgName, string args = "",params string[] teps) { Process p = new Process(); string path = "merge.py";// 待處理python檔案的路徑 string sArguments = path; foreach (string sigstr in teps)//新增引數 { sArguments += " " + sigstr;//傳遞引數 } //下面為啟動一個程序來執行指令碼檔案設定引數 p.StartInfo.FileName = @"C:\Python27\ArcGIS10.2\python.exe"; //注意路徑 p.StartInfo.Arguments = sArguments;//這樣引數就是merge.py 路徑1 路徑2 路徑3.... Console.WriteLine(sArguments); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; p.Start();//啟動程序 } (5)merge.py
import arcpy from arcpy import env import sys # 這裡只取了前兩個輸入資料集作為合併物件 arcpy.Merge_management([sys.argv[1], sys.argv[2]], sys.argv[len(sys.argv)-1]) 注意:merge,py放在WindowsFormsApplication1\bin\Debug目錄下 (6)執行結果

相關推薦

C#呼叫python指令碼使用python第三方arcpy模組

前言 1、C#中呼叫python指令碼,一是通過ironpython直接執行python指令碼,二是通過呼叫Process類啟動電腦上的python.exe,執行python指令碼。 前者在使用第三方arcpy模組式,會提示錯誤:No Module Named arcpy,

java 直接呼叫python指令碼傳遞引數

最近陸續用python寫了很多檔案處理指令碼,雖然功能都比較簡單 ,但還是感覺到python對檔案處理的簡潔高效 ,越發覺得java的語法相當的繁瑣~ 接到個需求處理ftp資料介面 。所以想把python指令碼也用上。java程式碼定時掃描ftp資料倉庫 ,呼叫pyt

從主Activity呼叫子Activity返回結果給主Activity

使用Intent在Activity間傳遞資料的方法; 1.以Sub-Activity的方式啟動子Activity 呼叫startActivityForResult(Intent,requestCode)函式。 2.設定子Activity的返回值 呼叫setResult()函式設定需要返回給父

shell呼叫php指令碼傳遞引數

命令列執行帶引數的php指令碼,並取得引數  發表於 2011-07-15 分類目錄: php 一,為什麼我們要在命令列下執行php指令碼呢? 個人理解,主要有二個原因: 1,利用crontab去跑php,可以給伺服器減壓,當然在這裡有一個條件,就是實時性要求

從UIWebView呼叫iOS相簿選擇圖片上傳到Linux Web伺服器。

======首先看以下ios端======= ViewController.h // //  ViewController.h //  Xcode_FileUpload // //  Created by KirSsu Ryu on 12-8-7. //  Copyright (c) 201

android C 呼叫SHELL指令碼

  最近在除錯4.2的程式碼發現需要在lunx中所以需要自己想辦法修改, 於是想到了 在C中呼叫指令碼 指令碼: check_voice_value.sh #!/system/bin/sh READ

linux的C程式 呼叫 shell指令碼獲取shell的執行結果

linux下通過C執行命令的時候一半都是使用system()方法,但是該方法執行命令返回的值是-1或0,而有時候我們需要得到執行命令後的結果。可以使用管道實現 輸出到檔案流的函式是popen(),例如 FILE *isr; isr = popen("ls -l","r"

Vue專案使用element-ui引入第三方圖示庫iconfont

1、安裝 npm install element-ui --save-dev 2、在main.js檔案中引入 import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.c

C#呼叫命令列執行python指令碼這個辦法可以呼叫python第三方模組和對本地檔案進行操作

string pythonScriptPath = Server.MapPath(@"~\pythonScript");//python指令碼所在的目錄 ProcessStartInfo start = new Pro

java呼叫Linux執行Python爬蟲將資料儲存到elasticsearch--(一、環境指令碼搭建)

java呼叫Linux執行Python爬蟲,並將資料儲存到elasticsearch中 一、以下部落格程式碼使用的開發工具及環境如下: 1、idea: 2、jdk:1.8 3、elasticsearch:5.2.0 4、Linux 5、Python 6、maven 二、maven座標: <!--jav

[VS2013]C++呼叫Python指令碼提示 error LNK2001: 無法解析的外部符號__imp_PyString_FromString等錯誤的解決方案

配置如下 VS2013專案: Win32 Console,Release X64  包含目錄   : C:\Python27\include 庫 目 錄     : C:\Python27\libs

在QT C++呼叫 Python將軟體打包釋出(裸機可執行)

      為了提高工作效率,需要一個可以自動生成多份相關聯的word文件免去繁瑣複製貼上工作的軟體。最後選定使用QT C++做介面和主要邏輯程式設計,對word的操作使用python寫好對應的函式,然後在QT中呼叫自己寫好的python函式完成相應的功能。由於這是第一次使用py

java調用Linux執行Python爬蟲將數據存儲到elasticsearch--(java後臺代碼)

創建 author cor 運行 hpa 詳細信息 多線程 under lean 該篇博客主要是java代碼,如需相應腳本及java連接elasticsearch工具類代碼,請移步到上一篇博客 一、創建連接執行Linux腳本工具類 package com.yjlc.pla

python呼叫matplotlib畫圖中文標註亂碼強力解決辦法

關於python中呼叫matplotlib畫圖,中文標註亂碼 如下: 解決辦法: # 通用字型設定 from matplotlib import font_manager # my_font = fo

python呼叫matplotlib畫圖各種中文標註亂碼強力解決辦法

關於python中呼叫matplotlib畫圖,中文標註亂碼 如下: 1、 常規情況 2、 特殊情況 圖形註釋(plt.legend()) 餅狀圖(plt.pie()) 解決辦法: 針對常規情況 # 通用字型設定 fro

C++ 呼叫python

學以致用 參考網站https://docs.python.org/3.3/c-api/index.html Py_SetPythonHome(); 用來設定Python指令碼的目錄,如需設定必須在init前 Py_Initialize(); 初始化python環境 PyObj

C#呼叫python方法

1. 安裝IronPython 2. 建立專案 建立一個C#的控制檯應用程式。 新增引用: 瀏覽到IronPython的安裝目錄中,新增對IronPython.dll,Microsoft.Scripting.dll 兩個dll的引用。 3. 新增Pytho

利用c#實現dll動態庫c++呼叫的方法

           近期,在進行一個大專案開發。其中涉及多語言協同開發。主要是c#dll和c++dll的開發和應用,其中,需要在c++中呼叫c#dll的內容。現在把開發中的經驗、教訓和注意事項總結整理如下,希望對其他人能有所幫助。           1.建立c#dll,

shell呼叫python指令碼並且向python指令碼傳遞引數

shell中: python test.py $para1 $para2 python中: import sys def main($canshu1, $canshu2)   ..... ma

C#呼叫Python遇到的坑(No module named xxx)

例如Python的程式碼是這個樣子的。 # coding=<utf-8> # -*- coding: utf-8 *- import requests import urllib def ClearDirect():#直接刪除 print('sadsa') C