PythonスクリプトがArcGIS(arcmapまたはサーバー上)またはスタンドアロンのPythonスクリプトから実行されているかどうかの確認


8

デバッグのために、スクリプトがスタンドアロンまたはArcGISツールとして実行されることを確認するハードコードされた条件を作成しました。とにかくこれを実行時に推測することはありますか?例:環境変数、グローバル変数など

例えば

dryRun= 1
if dryRun:
    par= 'Hello'
else:
    par= arcpy.GetParameterAsText(0)
# Do something

回答:


19

確認してくださいsys.executable

Pythonウィンドウで:

>>> import sys
>>> sys.executable
'C:\\Program Files (x86)\\ArcGIS\\Desktop10.2\\bin\\ArcMap.exe'

そして次にPython.exe

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.executable
'C:\\Python27\\ArcGIS10.2\\python.exe'

したがって、シンプルな方法if os.path.basename(sys.executable).lower() == 'python.exe'で実行する必要があります。


ありがとうございます。ただし、私の主な目標は、ローカル実行とサーバー実行を比較することでした(つまり、ジオプロセシングサービスとして
Mahdi

sys.executableサーバーツールとして実行した場合も、これは異なるものになると思います。arcpy.AddMessage("Executable: " + sys.executable)確認のために発行するテストスクリプトを記述します。
Jason Scheirer 2013

1

質問を正しく理解できたら、スクリプトをスクリプトツールとして実行しているかどうかを確認してください。スクリプトツールとして実行している場合は、GetParameterAsTextを使用していくつかの変数を設定します。スタンドアロンで実行している場合は、いくつかのハードコードされた変数を使用します。これは正しいですか。その場合は、次のことを実行できます。

if len(sys.argv) > 1:
    #Assign input and output parameters for script tool
    par = arcpy.GetParameterAsText(0)
else:
    # Hard coded parameters for testing
    par = 'Hello'

sys.argvの長さをチェックすることで、スクリプトに渡されるパラメーターの数を決定しています。常に少なくとも1つのパラメーター(スクリプト自体の場所)があるため、渡されるパラメーターが複数ある場合は、ArcGISがパラメーターを送信していると想定できます(他の場所から引数を渡していない場合)。


さて、このちょっと今は動作しますb / c私は引数を渡しませんが、もっと「エレガントな」方法はありますか?
Mahdi 2013

:エレガントで、あなたが短い意味ならば、あなたはそれのようなので、ワンライナー作ることができますpar = arcpy.GetParameterAsText(0) if len(sys.argv) > 1 else 'Hello'
ポール・

「エレガント」とは、環境変数をチェックするようなものです。Pythonの意味での「エレガント」ではありません。ちなみに、私はこの構造体を自分で頻繁に使用していますが、ここで説明するケースでは、スクリプトに多くのパラメーターを設定している可能性が高いため、short-ifはあまり洗練されていません。
Mahdi 2013

0

それを行う簡単な方法は次のようになります:

import arcpy
par = arcpy.GetParameterAsText(0)
if not par: #If no parameter has been passed, an empty string is returned
  par = 'Hello'

以前は試していませんでしたが、例外が発生すると思っていました。これは間違いなく興味深いものです...それでも、スタンドアロン対ツールに基づいてコードロジックの一部を再配線することはできません。
Mahdi 2013

スクリプトがArcMapの外部から実行される場合、パラメーターの他に何を変更する必要がありますか?
Paul
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.