如何使用包含格式字符的URL进行字符串插值?

Cal*_*ods 2 python

我正在尝试使用URLLIB2打开URL并将内容读回到数组中.问题似乎是您不能在具有格式字符的URL中使用字符串插值,例如%20表示空格,%3C表示"<".有问题的URL中有空格和一些xml.

我的代码很简单,看起来像这样:

#Python script to fetch NS Client Policies using GUID

import sys
import urllib2

def GetPolicies(ns, guid):
    ns = sys.argv[1]
    guid = sys.argv[2]
    fetch = urllib2.urlopen('http://%s/Altiris/NS/Agent/GetClientPolicies.aspx?xml=%3Crequest%20configVersion=%222%22%20guid=%22{%s}%22') % (ns, guid)
Run Code Online (Sandbox Code Playgroud)

为简洁起见,我缩短了URL,但是你得到了一般的想法,你得到一个'格式字符串的参数不够'错误,因为它假设你想要使用%3,%20和其他东西作为字符串插值.你怎么解决这个问题?

编辑:解决方案需要Python 2.6 +,2.5或更早版本不支持string.format()方法

nos*_*klo 5

你可以加倍%标志

url = 'http://%s/Altiris/NS/Agent/GetClientPolicies.aspx?xml=%%3Crequest%%20configVersion=%%222%%22%%20guid=%%22{%s}%%22' % (ns, guid)
Run Code Online (Sandbox Code Playgroud)

或者你可以使用.format()方法

url = 'http://{hostname}/Altiris/NS/Agent/GetClientPolicies.aspx?xml=%3Crequest%20configVersion=%222%22%20guid=%22{id}%%2''.format(hostname=ns, id=guid)
Run Code Online (Sandbox Code Playgroud)