Ответ 1
Я бы предпочел не собираться, если я могу избежать этого.
Weeell Я думаю, вам понадобится немного взломанного платформой, но, надеюсь, не так сильно, как жуткий командный модуль webbrowser
. Вот первый удар по нему:
if sys.platform=='win32':
subprocess.Popen(['start', d], shell= True)
elif sys.platform=='darwin':
subprocess.Popen(['open', d])
else:
try:
subprocess.Popen(['xdg-open', d])
except OSError:
# er, think of something else to try
# xdg-open *should* be supported by recent Gnome, KDE, Xfce
Обратите внимание, что версия win32 в настоящее время не выполняется для пробелов в именах файлов. Ошибка 2304 может быть чем-то связана с этим, но, похоже, основная проблема связана с экранированием параметров и оболочкой Windows (cmd /c ...
), в том, что вы не можете вставлять двойные кавычки, и вы не можете ^ -изменить кавычки или пробелы. Мне не удалось найти какой-либо способ процитировать и запустить cmd /c start C:\Documents and Settings
из командной строки вообще.
Комментарий ETA re nosklo: только для Windows, есть встроенный способ сделать это:
if sys.platform=='win32':
os.startfile(d)
Здесь не очень-то приятное альтернативное решение для поиска оболочки и открытия папки с ней, которую вам теперь не нужно, но я уйду. (Отчасти потому, что это может быть полезно для чего-то другого, но в основном потому, что я потратил время, чтобы напечатать проклятую вещь!)
if sys.platform=='win32':
import _winreg
path= r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon')
for root in (_winreg.HKEY_CURRENT_USER, _winreg.HKEY_LOCAL_MACHINE):
try:
with _winreg.OpenKey(root, path) as k:
value, regtype= _winreg.QueryValueEx(k, 'Shell')
except WindowsError:
pass
else:
if regtype in (_winreg.REG_SZ, _winreg.REG_EXPAND_SZ):
shell= value
break
else:
shell= 'Explorer.exe'
subprocess.Popen([shell, d])