私がやりたいことは、urllib2 を使用して App Engine で実行する既存の Python モジュールにパッチを適用することですが、他の場所で使用できるようにそれを壊したくありません。そのため、モジュールが App Engine 環境にインポートされているかどうかをテストする簡単なソリューションを探しています。urllib2 で ImportError をキャッチすることは、最善の解決策ではない可能性があります。
Vasil
質問する
3851 次
2 に答える
11
sys.modulesを使用して、モジュールがインポートされているかどうかをテストできます(例としてunicodedataを使用しています)。
>>> import sys
>>> 'unicodedata' in sys.modules
False
>>> import unicodedata
>>> 'unicodedata' in sys.modules
True
于 2008-12-02T21:13:13.867 に答える
0
主要な環境変数に対して簡単なチェックを行うことができます。ただし、これがどれほど信頼できるかは正確にはわかりません。
import os, logging
try:
os.environ['APPENGINE_RUNTIME']
except KeyError:
logging.warn('We are not in App Engine environment')
else:
logging.info('We are in the App Engine environment')
App Engine 構成ファイルで独自のカスタム環境変数を定義することもできos.environ
ます。これは、任意のモジュール内から表示できます。したがって、app.yaml ファイルに次のように入力します。
env_variables:
MY_APP_ENGINE_ENVIRONMENT: '982844ed9cbd6ce42318d2804386be29cbc7c35a'
...参照するための明確なIDが提供されます。
開発サーバーから取得した環境変数は次のとおりです。
{'USER_EMAIL': '',
'DATACENTER': 'us1',
'wsgi.version': (1, 0),
'REQUEST_ID_HASH': 'E2C19D51',
'SERVER_NAME': 'mydesktop',
'QUERY_STRING': '',
'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'APPENGINE_RUNTIME': 'python27',
'wsgi.input': <cStringIO.StringI object at 0x2f145d0>,
'SERVER_PROTOCOL': 'HTTP/1.1',
'HTTPS': 'off',
'USER_IS_ADMIN': '0',
'TZ': 'UTC',
'REMOTE_ADDR': '192.168.0.2',
'HTTP_X_APPENGINE_COUNTRY': 'ZZ',
'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36',
'SERVER_SOFTWARE': 'Development/2.0',
'HTTP_CACHE_CONTROL': 'max-age=0',
'DEFAULT_VERSION_HOSTNAME': 'mydesktop:8080',
'SERVER_PORT': '8080',
'wsgi.run_once': False,
'REQUEST_METHOD': 'GET',
'USER_ID': '',
'AUTH_DOMAIN': 'gmail.com',
'USER_NICKNAME': '',
'USER_ORGANIZATION': '',
'wsgi.multiprocess': True,
'INSTANCE_ID': '8a8e02e6efa8d195346ae0c90cfeafce8aa2',
'PATH_INFO': '/',
'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8',
'HTTP_HOST': 'mydesktop:8080',
'wsgi.errors': <google.appengine.api.logservice.logservice.LogsBuffer object at 0x2f09c30>,
'APPLICATION_ID': 'dev~myapp',
'wsgi.multithread': True,
'CURRENT_VERSION_ID': 'version-1',
'SCRIPT_NAME': '',
'REQUEST_LOG_ID': '4eafbc91ca4ebd5fee53f19eeab2eb26d243d9ddc92b6b9bc0a063eabdc84cfff',
'wsgi.url_scheme': 'http'}
それが役立つことを願っています。
于 2013-06-20T18:25:29.497 に答える