我有一些代码可以打开谷歌表格:
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分钟)后成功连接
您的问题出在您的网络设置中。
正如您所提到的:您在两台不同的机器上运行完全相同的代码。所以这可能不是代码问题,但很可能是机器
当读取堆栈跟踪时,我们看到它挂在方法上:
sock.connect(sa)
,它有效地连接到主机。因此,如果此功能挂起,那是因为您的网络设置不正确。
修复旅游网络设置然后它应该可以正常工作😉