gspread 自发挂在 linux 上

问题描述 投票:0回答:1

我有一些代码可以打开谷歌表格:

import gspread
gc = gspread.service_account(filename='bot/creds.json')
doc = gc.open("Tournaments")
print(doc)

代码在我的 Windows 10 PC 上运行时完全正常:

<Spreadsheet 'Tournaments' id:[REMOVED]>

然而,当我在我的 linux 服务器上运行它时,它挂起了。当我使用 Ctrl+C 时,我得到以下信息:

^CTraceback (most recent call last):
  File "testing.py", line 3, in <module>
    doc = gc.open("Tournaments")
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/gspread/client.py", line 152, in open
    self.list_spreadsheet_files(title, folder_id),
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/gspread/client.py", line 127, in list_spreadsheet_files
    res = self.request("get", url, params=params).json()
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/gspread/client.py", line 79, in request
    response = getattr(self.session, method)(
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 546, in get
    return self.request('GET', url, **kwargs)
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/google/auth/transport/requests.py", line 476, in request
    self.credentials.before_request(auth_request, method, url, request_headers)
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/google/auth/credentials.py", line 133, in before_request
    self.refresh(request)
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/google/oauth2/service_account.py", line 410, in refresh
    access_token, expiry, _ = _client.jwt_grant(
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/google/oauth2/_client.py", line 193, in jwt_grant
    response_data = _token_endpoint_request(request, token_uri, body)
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/google/oauth2/_client.py", line 161, in _token_endpoint_request
    response_status_ok, response_data = _token_endpoint_request_no_throw(
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/google/oauth2/_client.py", line 115, in _token_endpoint_request_no_throw
    response = request(method="POST", url=token_uri, headers=headers, body=body)
  File "/home/[REMOVED]/.local/lib/python3.8/site-packages/google/auth/transport/requests.py", line 183, in __call__
    response = self.session.request(
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 376, in _make_request
    self._validate_conn(conn)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 996, in _validate_conn
    conn.connect()
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 314, in connect
    conn = self._new_conn()
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 159, in _new_conn
    conn = connection.create_connection(
  File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 74, in create_connection
    sock.connect(sa)
KeyboardInterrupt

代码存储在我服务器上的网络驱动器中,因此两台计算机都在同一根文件夹中运行完全相同的代码。

我不明白我做错了什么(╯°□°)╯︵┻━┻

似乎与这个未真正回答的问题类似Gspread stuck on authorization

总的来说,我对整个网络很陌生,所以 ELI5.

编辑:就像链接的问题一样,它确实在很长一段时间(> 10分钟)后成功连接

python python-3.x gspread
1个回答
0
投票

您的问题出在您的网络设置中。

正如您所提到的:您在两台不同的机器上运行完全相同的代码。所以这可能不是代码问题,但很可能是机器

当读取堆栈跟踪时,我们看到它挂在方法上:

sock.connect(sa)
,它有效地连接到主机。因此,如果此功能挂起,那是因为您的网络设置不正确。

修复旅游网络设置然后它应该可以正常工作😉

© www.soinside.com 2019 - 2024. All rights reserved.