Pythonジオプロセシングサービスで外部ファイルを呼び出すにはどうすればよいですか?


8

Rスクリプトを呼び出し、出力をPythonに読み込むPythonスクリプトを作成しました。このツールはArcGIS Desktop(10.2.1)で実行でき、正常に動作します。ジオプロセシングサービスとして公開すると、Rスクリプトに到達すると失敗します。ファイルパスを確認しましたが、問題ありません。ジオプロセシングサービスから外部スクリプトを呼び出すこともできますか?これが私のコードです。

import sys, os, arcpy
arcpy.AddMessage("Loaded Python Imports...")

try:
#User Input
lat = arcpy.GetParameterAsText(0)
long = arcpy.GetParameterAsText(1)

arcpy.AddMessage("LAT: " + "".join(lat))
arcpy.AddMessage("LONG: " + "".join(long))

#Create R Command
rScript = "test.R"
args = " ".join([lat, long])
RCMD = "R --slave --vanilla --args "
cmd = RCMD + args + " < " + rScript

#Execute
os.system(cmd)

#Render the Results
output = open("FILE PATH")
finalNumber = output.read()
print("The output is: " + " ".join(finalNumber))
arcpy.AddMessage("The output is: " + " ".join(finalNumber))
output.close()

#Delete Text File
os.remove("FILE PATH")

except Exception as e:
    print e.message
    arcpy.AddError(e.message)

使用しているArcGISサーバーのバージョンがわからず、システムの構成もわかりませんが、少なくとも古いArcGIS Serverの構成、v10.0以前では、実行されるサービスはすべて通常、専用のユーザーアカウント(SOMおよびSOCユーザーなど)を介して実行されます。あなたの権限がどのように設定されているかはわかりませんが、そうでない場合はサーバー/ Web管理者に連絡して、サービスの実行に使用されているユーザーと、そのユーザーがすべてにアクセスするために必要なすべての権限を持っているかどうかを確認します関連するプログラムとファイル。また、サーバーからArcDesktopでテストしましたか?
ジョン

私はArcGIS Server 10.2.1を使用しており、私はWeb管理者です。権限をテストしましたが、それは問題ではありません。このツールはサーバー上のArcGIS Desktopで機能しますが、ジオプロセシングサービスとしては機能しません。ツールをデスクトップから実行すると、Rコンソールウィンドウがポップアップし、Rプロセスが表示されます。サービスを実行しているときにこれが表示されません。ArcGISデスクトップでツールを実行できるため、サーバーにRがインストールされていることを知っています。さて、トラブルシューティングを続けることだけが必要だと思います
Jeremy Hamm 14

この特定の問題については何も知りませんが、Rscript test.R arg1 arg2 arg3代わりに次のようなものを使用してみましたか?そのオプションに気づかなかった場合に備えて、実際にどのように見えるかの簡単な例を次に示します。
Josh O'Brien 14

ええ、問題はRスクリプト自体にあるとは思いません。ArcMapでジオプロセシングサービスを実行すると、Rスクリプトが呼び出される前、またはスクリプトを呼び出そうとして失敗します。Rがサーバーにインストールされていることを知っています。私はこれに本当に困惑しています...
Jeremy Hamm

わかった、うまくいくといいね。これを理解したら、ここに答えを投稿してください。
ジョシュ・オブライエン

回答:


2

私はこの記事を見つけました:ModelBuilder内の外部プログラムの統合、それは古く、最初はトピックから外れているように見えますが、これを見るここに画像の説明を入力してくださいと、Rスクリプトへのパスが明示的に設定されていることがわかります。

ジオプロセシングスクリプトがサーバーで実行されると、jobsディレクトリ内のスクラッチフォルダーで実行されます。公開プロセスによっては、Rスクリプトが存在しない場合があります。ジオプロセシングサービス内で外部スクリプトを参照するときは常に、データソースとして登録されているフォルダーから常に明示的にスクリプトを参照します


実際にこれに似た方法を使用しましたが、ジオプロセシングサービスのルートは使用しませんでした。PythonスクリプトはRコードを実行し、Rスクリプトから出力テキストファイルを読み込みます。これは、モデルを実行して結果を返す最も効率的な方法でした
Jeremy Hamm '18

1

コードで行うように名前でファイルを直接参照する場合は、ESRIツール構造を使用してファイルをスクリプトフォルダーに含める必要があります。http://resources.esri.com/help/9.3/ArcGISDesktop/com/Gp_ToolRef/sharing_tools_and_toolboxes/a_structure_for_sharing_tools.htm

それ以外の場合は、sys.pathにスクリプトの場所を追加する必要があります。以下の例では、ファイル「\ myFolder \ myModules \ myExtFile.py」を参照しています。ファイルへの有効な参照を取得したら、公開先がフォルダーパスにアクセスできる限り、GPサービスでカスタム関数を使用できます。

import sys, arcpy
sys.path.append(r'\\myFolder\myModules')

import myExtFile as extFile

if __name__ == '__main__':
    # Get values from ESRI
    param1 = arcpy.GetParameterAsText(0)

    # Use custom python library
    myVal = extFile.someFunc(param1)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.