1

プログラムに vb.net と Arcobjects を使用しています。kml を lyr ファイルに変換する ArcMap 10 のボタンを作成しています。

Python コードに変数を渡す際に問題が発生しています。変数はファイル パスであり、. 変数が動的に渡されると、プログラムはパス名の「/」で中断します。

    Dim Filelocation As OpenFileDialog = New OpenFileDialog()

    Filelocation.Title = "Please point photo of the owner"
    Filelocation.InitialDirectory = "B:\GeoSpatialData\Projects\004402 Griffiths\File Structure\Geospatial\GPS\KML"

    If Filelocation.ShowDialog = DialogResult.OK Then
        Dim kmlFile As String
        kmlFile = Filelocation.FileName

        Dim args As String
        args = kmlFile & " " & kmlFile.Substring(0, kmlFile.LastIndexOf("\")) & " test"
        Dim args2 As String = args.Replace("\", "/")
        Dim procStartInfo As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo("C:\Python26\python", "C:\Users\KJacobsen\kml_to_shp.py " & args2)

        ' The following commands are needed to redirect the standard output.
        ' This means that it will be redirected to the Process.StandardOutput StreamReader.
        procStartInfo.RedirectStandardOutput = True
        procStartInfo.UseShellExecute = False
        ' Do not create the black window.
        procStartInfo.CreateNoWindow = False

        ' Now you create a process, assign its ProcessStartInfo, and start it.
        Dim proc As New System.Diagnostics.Process()
        proc.StartInfo = procStartInfo
        proc.Start()
        proc.WaitForExit()

        ' Get the output into a string.
        Dim result As String = proc.StandardOutput.ReadToEnd()
        ' Display the command output.
        Console.WriteLine(result)
    End If
Catch objException As Exception
    ' Log the exception and errors.
    Console.WriteLine(objException.Message)
End Try

私のpythonスクリプトは次のようになります:

import os
import arcpy
import sys
import glob
arcpy.KMLToLayer_conversion(sys.argv[1],sys.argv[2],sys.argv[3])
print 
4

2 に答える 2

0

返されるパスにスペースが含まれていますか?あなたの最初のディレクトリからそう思われます。
その場合、スクリプトに渡されるコマンド引数が間違っている可能性があります。

すべてを二重引用符で囲み、パスを直接操作しないようにしてください。代わりにPath.GetDirectoryName()
を 使用してください

Dim args As String         
args = """" + kmlFile + """ " 
args = args & """" & Path.GetDirectoryName(kmlFile) & """ test" 
于 2012-06-28T16:11:43.340 に答える
0

に置き換え"\"ます"\\\"

それは機能しますか?

于 2012-06-28T15:57:21.200 に答える