【问题标题】:Locally execute python file that is located on a web server本地执行位于 Web 服务器上的 python 文件
【发布时间】:2012-06-09 11:27:15
【问题描述】:

我正在开发一个名为RubberBand 的开源项目,它是一个开源项目,允许您按照标题所说的去做。在本地执行位于 Web 服务器上的 python 文件,但是我遇到了问题。如果逗号位于字符串中(例如“http:”),则会返回错误。

'''
RubberBand Version 1.0.1 'Indigo-Charlie'
http://www.lukeshiels.com/rubberband

CHANGE-LOG:

Changed Error Messages.
Changed Whole Code Into one function, rather than three.
Changed Importing required libraries into one line instead of two

'''
#Edit Below this line

import httplib, urlparse

def executeFromURL(url):
    if (url == None):
        print "!# RUBBERBAND_ERROR: No URL Specified #!"
    else:
        CORE = None
        good_codes = [httplib.OK, httplib.FOUND, httplib.MOVED_PERMANENTLY]

    host, path = urlparse.urlparse(url)[1:3]
    try:
        conn = httplib.HTTPConnection(host)
        conn.request('HEAD', path)
        CORE = conn.getresponse().status

    except StandardError:
        CORE = None

    if(CORE in good_codes):
        exec(url)
    else:
        print "!# RUBBERBAND_ERROR: File Does Not Exist On WEBSERVER #!"

【问题讨论】:

  • 你可以在一行 shell 代码中做到这一点:wget http://some-url.com/path | python.
  • @Thomas - 几乎:wget -O - http://some-url.com/path | python
  • 有比httplib 更高级别的API 用于通过HTTP 获取文件,例如requestsurllib2。请参阅下面我的答案中的示例。

标签: python web exec


【解决方案1】:

您应该在 if (url == None): 块中使用 return 语句,因为继续执行您的功能没有意义。

您的代码中的错误在哪里,是否有完整的回溯,因为带有逗号的 URI 可以使用 urlparse 模块解析。

在调用CORE = conn.getresponse().status时可能是httplib.ResponseNotReady吗?

别在意那个错误消息,那是我快速测试您的代码并重新使用相同的连接对象。我看不出你的代码有什么错误。

【讨论】:

  • 我应该尝试下载文件,然后运行它,然后运行成功后立即删除它?
  • 实际上刚刚意识到您的错误是什么,您正在尝试执行 URL 而不是您检索到的 Python 脚本。在你的请求之后,你应该得到响应,然后检查响应的状态码,如果可以,那么你可以执行.read()
【解决方案2】:

我建议检查这个问题。

避免在 URL 中使用逗号,这是我的建议。

Can I use commas in a URL?

【讨论】:

  • 我已经想通了,并将文件大小(未压缩,不包括文档)减小到 549 字节。我已经在 Romeo 的网站上更新到 2.0 版!请检查并告诉互联网!它可能是一个简单的项目,但对我来说真的很重要,可以用来运行你的 python 项目,但无论如何都会保持最新。 (这提醒了我,如果你没有互联网连接怎么办?版本 2.0.1 Romeo-Juliet 即将推出!)
  • 我用的是mata的版本,效果很好。您可以在lukeshiels.com/rubberband 下载并根据需要进行编辑。
【解决方案3】:

RubberBand 三行无错误检查:

import requests
def execute_from_url(url): 
    exec(requests.get(url).content)

【讨论】:

    【解决方案4】:

    这似乎对我很有效:

    import urllib
    (fn,hd) = urllib.urlretrieve('http://host.com/file.py')
    execfile(fn)
    

    我更喜欢使用标准库,因为我使用的是与第三方软件 (abaqus) 捆绑在一起的 python,这使得添加软件包非常头疼。

    【讨论】:

      猜你喜欢
      • 2011-08-25
      • 2017-11-09
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多