如何解决当未使用Python应用程序连接到互联网时无法在www.googleapis.com上找到服务器的问题

时间:2019-06-14 18:36:04

标签: python google-drive-api python-import httplib2

我有一个使用python制作的桌面应用程序,可以作为独立应用程序运行,它可以在不依赖互联网的情况下正常运行。仅连接到Google云端硬盘应用需要互联网连接。

问题在于,在运行该应用程序时,如果未连接到互联网,则该应用程序将崩溃,因为它包含与互联网连接相关的导入语句。

有效的方法: 在注释掉与Internet连接相关的导入语句后,该应用程序可以在离线环境中正常执行。

什么不起作用: 当导入语句包含在代码中并且没有互联网连接时,该应用程序只会崩溃。下面是一些伪代码。

main.py

from kivy.app import App
'''More import statements'''
....
....
from helper import Hi

class Hello(Hi):
'''Rest of the Code goes here'''
...
...
...

helper.py

'''If the device is not connected to the internet, the following internet import statements throw an error. These imports are needed to connect Google Drive.'''

from __future__ import print_function
import httplib2
import os, io

from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage
from apiclient.http import MediaFileUpload, MediaIoBaseDownload
try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None
import auth

class Hi:
pass
'''Rest of the Code goes here'''
...
...
...

期望: 需要一种方法来使应用程序即使在没有互联网连接的情况下也能正常运行。如果没有互联网连接,请警告用户连接到互联网以访问Google云端硬盘,而不仅仅是崩溃。

错误: httplib2.ServerNotFoundError:在www.googleapis.com上找不到服务器

我了解从上至下读取python代码,由于导入语句验证其未连接到互联网,因此应用程序崩溃。有没有一种方法可以使该应用程序脱机工作,并且对于在线活动,要求用户连接到互联网?

感谢您对此事的帮助。

1 个答案:

答案 0 :(得分:0)

能够借助此reference进行解决。问题不在于引用这些语句的函数是否存在import语句。

解决方法如下:

helper.py

from __future__ import print_function
import httplib2
import os, io

from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage
from apiclient.http import MediaFileUpload, MediaIoBaseDownload
try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None
import auth

import socket

class Hi:

    def is_connected():
        try:
        # connect to the host -- tells us if the host is actually reachable
            socket.create_connection(("www.google.com", 80))
            print("Connected to the internet, execute code.")
            self.fileUpload() #----- function is called, if host is reachable.
        except OSError:
            print("No internet, code not executed.")

   def fileUpload():
       # This is the function that requires the import statements
       ...
       ...