[英]Cant generate the correct path to execute a file - python
我正在尝试从python运行ventrilo并加入一个频道,
path= 'ventrilo://91.227.221.73:3824/servername=vGames&serverpassword=9929&channelname=CS.vGames.co.il GatherBot -2-/.Team-A&channelpassword=57'
os.startfile(path)
我在ventrilo中得到的实际路径是: CS.vGames.co.il GatherBot
,因为缺少频道-2-/.Team-A
。
我知道可以做到这一点,因为当我从IRC客户端执行此操作时,它可以工作。 在我的IRC客户端中,我使用%20
来使它正常工作。
在python中,我尝试了所有可以在互联网上找到的内容。 请帮我。
正确的答案是使用urllib.urlencode
构建URL的查询字符串部分。 例如:
qparams = {
'servername': 'vGames',
'serverpassword': '9929',
'channelname': 'CS.vGames.co.il GatherBot -2-/.Team-',
'channelpassword': '57' }
path = 'ventrilo://91.227.221.73:3824/' + urllib.urlencode(qparams)
如果您有其他地方的硬编码查询字符串,则可以在其上使用urllib.quote
:
qstring = 'servername=vGames&serverpassword=9929&channelname=CS.vGames.co.il GatherBot -2-/.Team-A&channelpassword=57'
path = 'ventrilo://91.227.221.73:3824/' + urllib.quote(qstring)
或者,如果你从别的地方得到了一个完整的硬编码网址,该网址应该已经正确编码(用“%20”为“”,等等)。 如果您手动编写URL,则始终可以通过手工编码,只需将%20替换为空格,然后编码其他所有您注意到的内容,直到它起作用为止……但这通常不是一种有效的方法,只能用于快速,肮脏的黑客攻击。在翻译中。
你可以尝试这样的:使用urlparse.urlparse
它,然后encode
或quote
查询字符串的一部分,并把它重新走到一起。 但是不能保证它会做正确的事。 您在给它垃圾,它并不一定知道这是什么垃圾。 例如,频道名称中有一个未编码“/”,因此谁知道urlparse
将做到这一点。 更不用说你甚至没有一个“?” 介绍查询字符串。
因此,您可能需要一些自定义代码来解决此问题。
但是最好的解决方案是退后一步:无论URL来自何处,某人在某个时候都必须知道什么是路径,什么是查询字符串以及如何联接查询参数等等。 捕获当时的知识并将其传递下来,并使用urllib.urlencode
以正确的方式进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.