0

更新をトリガーするには、ブラウザで URL にアクセスする必要があります。このスクリプトは、それを行うためにシェルで作成されました。

#!/bin/bash
# Bash to initiate Solr Delta Import Handler

# Setup Variables
hostName=localhost
portNum=8080
SOLRPATH=/solr
SOLR='delta-import&clean=false'
STATUS='dataimport?command=status'
urlCmd='http://${hostName}:${portNum}${SOLRPATH}/dataimport?command=${SOLRCMD}"

# Operations
curl $URLCMD 

私はこれをPythonで書こうとしましたが、これは私が得た距離です:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Setup Variables
hostName='localhost'
portNum='8080'
SOLRPATH='/solr'
SOLRCMD='delta-import&clean=false'
STATUSCMD='dataimport?command=status'
urlCmd='http://${hostName}:${portNum}${SOLRPATH}/dataimport?command=${SOLRCMD}'

# Alternative to Curl {URLCMD}

だから基本的に私は2つの質問があります:

  1. 私のpythonコードは今のところ大丈夫ですか?
  2. PythonでCurlに代わる簡単な方法は何ですか? イベントは通常、URL にアクセスするだけでトリガーされますが、Python で簡単にこれを行う方法がわかりません。
4

2 に答える 2

3

まず、Python で次の種類の文字列フォーマットのいずれかを使用します。

urlCmd='http://{0}:{1}{2}/dataimport?command={3}'.format(hostName,portnum, SOLRPATH, SOLRCMD)
#or
urlCmd='http://%s:%s%s/dataimport?command=%s' % (hostName,portnum, SOLRPATH, SOLRCMD)

Python には libcurl を使用するpycurlがありurllib2ますが、スクリプトの移植性を維持したい場合は、生成した URL にアクセスするなどの組み込みモジュールを使用する必要があります。

import urllib2
req = urllib2.urlopen(urlCmd)

リクエストに対してできることがいくつかあります。

req.close      req.fileno     req.getcode    req.headers    req.msg  
req.read       req.readlines  req.code       req.fp         req.geturl   
req.info       req.next       req.readline   req.url

ほとんどのメソッドは自明ですが、urllib2 のドキュメントを参照して、メソッドの詳細な説明を確認してください。

于 2012-11-18T21:46:15.190 に答える
2
  1. 私のpythonコードは今のところ大丈夫ですか?

いいえ、ちがいます。Python での文字列の書式設定をご覧ください。

これを試して:

...
urlCmd='http://%s:%d%s/dataimport?command=%s' % (hostName, portNum, SOLRPATH, SOLRCMD)
  1. PythonでCurlに代わる簡単な方法は何ですか? イベントは通常、URL にアクセスするだけでトリガーされますが、Python で簡単にこれを行う方法がわかりません。

urllibモジュールを試してください:

import urllib    
urllib.urlopen(url)
于 2012-11-18T21:42:18.473 に答える