0

要触发更新,您必须访问浏览器中的 url。这个脚本是在 shell 中制作的:

#!/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}

所以基本上我有两个问题:

  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 的pycurlurllib2 ,但如果您希望脚本保持可移植性,您应该使用内置模块,例如访问您生成的 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 回答