首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当尝试使用github3.py创建文件时,"InvalidSchema“

当尝试使用github3.py创建文件时,"InvalidSchema“
EN

Stack Overflow用户
提问于 2016-04-02 23:50:52
回答 2查看 168关注 0票数 1

使用github3.py 1.0.0a4,我尝试制作一个创建、更新、删除和获取文件的基本“服务器”程序。但是,我的程序在试图创建文件时引发"InvalidSchema“。为什么?我查了我的程序和文件..。

代码:

代码语言:javascript
复制
from github3 import login
from github3.repos.repo import Repository

import sys, time

print sys.argv

if len(sys.argv) != 5:
    print 'Usage: server.exe username=... password=... [[-create -delete -update -fetch] file] [repo=server]'
    sys.exit()

try:
    un, pw, mode, f = sys.argv[1].split('='), sys.argv[2].split('='), sys.argv[3], sys.argv[4]
    me = login(un, pw)
except:
    print 'Usage: server.exe username=... password=... [[-create -delete -update -fetch] file] [repo=server]'
    sys.exit()

try:
    repo = sys.argv[5]
except IndexError:
    repo = 'server'

repo = Repository({'name':repo}, session=me)

if mode == '-create':
    f = open(f)
    name = f.name
    data = f.read()
    repo.create_file(name, 'Create '+time.asctime(), data.encode('utf-8'))

if mode == '-delete':
    f = open(f)
    repo.contents(f.name).delete('Delete '+time.asctime(), data.encode('utf-8'))

if mode == '-update':
    f = open(f)
    name = f.name
    data = f.read()
    repo.contents(name).update('Update '+time.asctime(), data.encode('utf-8'))

if mode == '-fetch':
    with open(f, mode='w') as f:
        f.write(repo.contents(f.name))

在命令行上运行时的结果:

代码语言:javascript
复制
C:\Python27>python server.py username=... password=... -create pytest.py
['server.py', 'username=...', 'password=...', '-create', 'pytest.py']
Traceback (most recent call last):
  File "server.py", line 30, in <module>
    repo.create_file(name, 'Create '+time.asctime(), data.encode('utf-8'))
  File "C:\Python27\lib\site-packages\github3\decorators.py", line 33, in auth_wrapper
    return func(self, *args, **kwargs)
  File "C:\Python27\lib\site-packages\github3\repos\repo.py", line 745, in create_file
    json = self._json(self._put(url, data=dumps(data)), 201)
  File "C:\Python27\lib\site-packages\github3\models.py", line 199, in _put
    return self.session.put(url, **kwargs)
  File "C:\Python27\lib\site-packages\requests\sessions.py", line 521, in put
    return self.request('PUT', url, data=data, **kwargs)
  File "C:\Python27\lib\site-packages\github3\session.py", line 88, in request
    response = super(GitHubSession, self).request(*args, **kwargs)
  File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Python27\lib\site-packages\requests\sessions.py", line 570, in send
    adapter = self.get_adapter(url=request.url)
  File "C:\Python27\lib\site-packages\requests\sessions.py", line 644, in get_adapter
    raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for ':///contents/pytest.py
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-13 22:46:09

在这条线上:

代码语言:javascript
复制
un, pw, mode, f = sys.argv[1].split('='), sys.argv[2].split('='), sys.argv[3], sys.argv[4]

您将unpw赋值为列表,而使用它们时就像使用字符串一样。您需要找到从.split()创建的第二项列表:将行替换为

代码语言:javascript
复制
un, pw, mode, f = sys.argv[1].split('=')[1], sys.argv[2].split('=')[1], sys.argv[3], sys.argv[4]

为我工作过。

票数 0
EN

Stack Overflow用户

发布于 2016-04-03 21:10:16

unpw是列表而不是字符串。使用un = sys.argv[1].split('=')[1]或类似的东西。

编辑代码:

代码语言:javascript
复制
from github3 import login
from github3.repos.repo import Repository

import sys, time

if len(sys.argv) != 5:
    print 'Usage: server.exe username=... password=... [[-create -delete -update -fetch] file] [repo=server]'
    sys.exit()

try:
    un, pw, mode, f = sys.argv[1].split('=')[1], sys.argv[2].split('=')[1], sys.argv[3], sys.argv[4]
    me = login(un, pw)
except:
    print 'Usage: server.exe username=... password=... [[-create -delete -update -fetch] file] [repo=server]'
    sys.exit()

try:
    repo = sys.argv[5]
except IndexError:
    repo = 'server'

repo = me.repository(un, repo)

if mode == '-create':
    f = open(f)
    name = f.name
    data = f.read()
    repo.create_file(name, 'Create '+time.asctime(), data.encode('utf-8'))

if mode == '-delete':
    f = open(f)
    repo.file_contents(f.name).delete('Delete '+time.asctime())

if mode == '-update':
    f = open(f)
    name = f.name
    data = f.read()
    repo.file_contents(name).update('Update '+time.asctime(), f.read().encode('utf-8'))

if mode == '-fetch':
    with open(f, mode='w') as f:
        f.write(repo.file_contents(f.name).decoded)

(还修复了其他一些bug,比如删除。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36380033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档