我有一个脚本,打算由多个用户在多台计算机上运行,但他们并不都在各自的主目录中有自己的Dropbox文件夹。我不喜欢在脚本中硬编码路径。我更愿意通过编程来弄清楚这条路。
欢迎任何建议。
编辑:我没有在脚本中使用Dropbox API,脚本只是读取用户之间共享的特定Dropbox文件夹中的文件。我唯一需要的是Dropbox文件夹的路径,因为我当然已经知道了Dropbox文件结构中的相对路径。
编辑:如果重要的话,我使用的是Windows7。
发布于 2012-08-25 08:54:23
我找到了答案here。将s
设置为~\AppData\Roaming\Dropbox\host.db
中的第2行,然后使用base64对其进行解码,即可得到路径。
def _get_appdata_path():
import ctypes
from ctypes import wintypes, windll
CSIDL_APPDATA = 26
_SHGetFolderPath = windll.shell32.SHGetFolderPathW
_SHGetFolderPath.argtypes = [wintypes.HWND,
ctypes.c_int,
wintypes.HANDLE,
wintypes.DWORD,
wintypes.LPCWSTR]
path_buf = wintypes.create_unicode_buffer(wintypes.MAX_PATH)
result = _SHGetFolderPath(0, CSIDL_APPDATA, 0, 0, path_buf)
return path_buf.value
def dropbox_home():
from platform import system
import base64
import os.path
_system = system()
if _system in ('Windows', 'cli'):
host_db_path = os.path.join(_get_appdata_path(),
'Dropbox',
'host.db')
elif _system in ('Linux', 'Darwin'):
host_db_path = os.path.expanduser('~'
'/.dropbox'
'/host.db')
else:
raise RuntimeError('Unknown system={}'
.format(_system))
if not os.path.exists(host_db_path):
raise RuntimeError("Config path={} doesn't exists"
.format(host_db_path))
with open(host_db_path, 'r') as f:
data = f.read().split()
return base64.b64decode(data[1])
发布于 2015-03-20 22:27:33
在Dropbox Help Center上可以找到答案-- How can I programmatically find the Dropbox folder paths?
简短版本:
使用~/.dropbox/info.json
或%APPDATA%\Dropbox\info.json
长版本:
通过以下方式访问有效的%APPDATA%
或%LOCALAPPDATA%
位置:
import os
from pathlib import Path
import json
try:
json_path = (Path(os.getenv('LOCALAPPDATA'))/'Dropbox'/'info.json').resolve()
except FileNotFoundError:
json_path = (Path(os.getenv('APPDATA'))/'Dropbox'/'info.json').resolve()
with open(str(json_path)) as f:
j = json.load(f)
personal_dbox_path = Path(j['personal']['path'])
business_dbox_path = Path(j['business']['path'])
发布于 2014-09-25 08:17:51
这个基于J.F. Sebastian建议的改编适用于我的Ubuntu:
os.path.expanduser('~/Dropbox')
并将工作目录实际设置为:
os.chdir(os.path.expanduser('~/Dropbox'))
https://stackoverflow.com/questions/12118162
复制相似问题