0

えーと、

私はまだPythonの基本を理解しています..

私の現在の要件は、複数のデバイスの Web ベースのインターフェイスの可用性をテストする Python スクリプトを開発することです (たとえば、Web ブラウザー経由で「http://192.168.0.2:9876」と入力する必要がある場合)。複雑すぎる必要があります。

もともと bash スクリプトに次のようなものがあったため、単純な bash curl コマンドから変換しようとしています。

    date=`date +"%Y-%m-%d_%H-%M-%S-%N"`
    curl -s --connect-timeout 1 ${ip} -o /dev/null
    test=$?
    if [[ $test == 0 ]] ;then
            echo "${date}:webping - Web Page Up for ${ip}" >> $log
    else
            echo "${date}:webping - Web Page Down for ${ip}" >> $log
    fi

これは元のコンセプトで機能しましたが、Pythonで似たようなものを探していました. 理由の範囲内で、出力は異なる場合があります...誰もがどこから始めるべきかについての指針を持っています。

PSここで他のいくつかの質問を見てきましたが、インターフェイスが「ダウン」した(つまり、サービスを停止した)誤検知を示しているようで、ステータスコード200が引き続き表示されます。

編集:以下は私が試したコードです。

for url in ["http://www.google.co.uk", "http://192.168.0.2:8000"]:
    try:
            connection = urllib2.urlopen(url)
            print connection.getcode()
            connection.close()
    except urllib2.HTTPError, e:
            print "none"

訂正: 次の結果が得られます...

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "C:\Python27\lib\urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 391, in open
    response = self._open(req, data)
  File "C:\Python27\lib\urllib2.py", line 409, in _open
    '_open', req)
  File "C:\Python27\lib\urllib2.py", line 369, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 1173, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "C:\Python27\lib\urllib2.py", line 1148, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 10061] No connection could be made because the target machine actively refused it>

Python のエラー出力を見たくないです。

前もって感謝します

4

1 に答える 1

0

http://docs.python-requests.org/en/latest/index.htmlを参照して、使いやすい API で必要な機能を提供する Python モジュールを確認してください。この例では、次の行に沿って何かを行います。

import requests
...
try:
  r = requests.get(url, timeout=1)
  ok = (r.status_code // 100) == 2
except:
  ok = False

# now use the value of ok

私がそこで使用した特定のテスト (成功は 2xx 応答を意味します) がまさにあなたが望むものであるかどうかはわかりません。

于 2012-05-13T21:40:01.533 に答える