【问题标题】:Cant generate the correct path to execute a file - python无法生成执行文件的正确路径 - python
【发布时间】:2012-09-27 21:53:53
【问题描述】:

我正在尝试从 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)

我进入腹腔的实际路径是:CS.vGames.co.il GatherBot,因为通道 -2-/.Team-A 缺失。

我知道可以这样做,因为当我从 IRC 客户端执行此操作时,它可以工作。 在我的 IRC clinet 中,我使用 %20 作为空间以使其工作。

在 python 中,我尝试了我在互联网上可以找到的所有内容。请帮我。

【问题讨论】:

  • 您是否尝试过将 %20 用于空格,或者更好的是,进行真正的 URL 编码?
  • 在 python 中我不能使用 %20 我在字符串中使用了 \x20 但没有帮助,关于 URL 编码我不明白如何在我的字符串上使用它
  • 嗨,谢谢,我实际上尝试将 %20 放​​入字符串本身并且它起作用了!

标签: python path


【解决方案1】:

这里的正确答案是使用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)

或者,如果您从其他地方获得了完整的硬编码 URL,则该 URL 应该已经正确编码(使用“%20”表示“”等)。如果您手动编写 URL,则始终可以手动对其进行编码,只需将空格替换为 %20,然后对您注意到的任何其他内容进行编码,直到它起作用为止……但这通常不是一个好方法,除了真正快速和肮脏的黑客攻击在口译员周围。

您可以尝试以下操作:在其上使用urlparse.urlparse,然后使用encodequote 查询字符串部分并将其重新组合在一起。但是不能保证它会做正确的事情。你给它垃圾,它不一定知道它是什么垃圾。例如,频道名称中有一个未编码的“/”,所以谁知道urlparse 会用它做什么。更不用说你甚至没有'?引入查询字符串。

因此,您可能需要一些自定义代码来解决该问题。

但最好的解决方案是退后一步:无论 URL 来自何处,都一定有人知道什么是路径、什么是查询字符串以及如何连接查询参数等等;捕获当时的知识并将其传递下去,并使用urllib.urlencode 以正确的方式做事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多