Мне нужно открыть документ, используя его приложение по умолчанию в Windows и Mac OS. В принципе, я хочу сделать то же самое, что и при двойном щелчке по значку документа в проводнике или Finder. Каков наилучший способ сделать это в Python?
Abdullah Jibaly 12 янв. 2009, в 07:41
Поделиться
С 2008 года возникла проблема, связанная с тем, что она была включена в стандартную библиотеку в трекере Python: bugs.python.org/issue3177
Ram Rachum 09 июль 2011, в 12:17
Поделиться:
13 ответов
Лучший ответ
В Mac OS вы можете использовать команду «open». Существует вызов Windows API, который делает что-то подобное, но я не помню его вслух.
Update
Хорошо, команда «start» сделает это, поэтому это должно сработать.
os.system(«open «+filename)
os.system(«start «+filename)
Многое позднее обновление Edward: os.system работает, но работает только с именами файлов, которые не имеют пробелов в папках и файлах в имени файла (например, A:abcdefa.txt).
Позднее обновление
Хорошо, ясно, что это глупое споры продолжаются, поэтому давайте просто взглянем на это с помощью подпроцесса.
[Python] Как открывать .py файл двойным кликом в редакторе IDLE на Windows
open и start являются средствами интерпретатора команд для Mac OS/X и Windows соответственно. Теперь предположим, что мы используем подпроцесс. Канонически, вы бы использовали:
try: retcode = subprocess.call(«open » + filename, shell=True) if retcode < 0: print >>sys.stderr, «Child was terminated by signal», -retcode else: print >>sys.stderr, «Child returned», retcode except OSError, e: print >>sys.stderr, «Execution failed:», e
Теперь, каковы преимущества этого? Теоретически это более безопасно — но на самом деле нам нужно выполнить командную строку так или иначе; в любой среде нам нужна среда и службы для интерпретации, получения путей и т.д. В любом случае мы не выполняем произвольный текст, поэтому у него нет встроенной «но вы можете набрать ‘filename ; rm -rf /’ «, и если имя файла может быть повреждено, использование subprocess.call не дает нам никакой защиты.
На самом деле это не дает нам больше обнаружения ошибок, мы все равно в зависимости от retcode в любом случае. Нам не нужно ждать дочернего процесса, так как мы имеем дело с выражением проблемы, начиная отдельный процесс.
«Но subprocess является предпочтительным». Однако os.system() не является устаревшим, и это самый простой инструмент для этой конкретной работы.
Заключение: использование os.system() — это самый простой, самый простой способ сделать это, и поэтому правильный ответ.
Источник: overcoder.net
Как запускать программы на Python файлы .py в Windows 10
OS Python
Основы
Автор Иван Душенко На чтение 9 мин Просмотров 2.7к. Опубликовано 22.06.2021
Введение в тему
Модуль os Python предоставляет возможность взаимодействовать с операционной системой, независимо от того, какая из них установлена на устройстве, что делает программы универсальными.
Этот модуль является частью стандартной библиотеки и не требует установки.
Модуль os предоставляет множество функций, которые можно применять при работе с операционной системой. В этом уроке Вы изучите основные возможности данной библиотеки.
os chdir и os getcwd
Функция os.chdir даёт возможность сменить директорию. При запуске скрипта базовой папкой является та, в которой этот скрипт был запущен.
Узнать полный текущий путь к рабочей папке позволяет функция os.getcwd().
Приведём пример использования обеих функций:
import os print(«Текущая директория:», os.getcwd()) os.chdir(r»C:UsersDushenkoDesktop») print(«Новая директория:», os.getcwd()) # Вывод: Текущая директория: C:UsersDushenkoAppDataRoamingJetBrainsPyCharm2021.1scratches Новая директория: C:UsersDushenkoDesktop
Листинг этой программы демонстрирует нам, что была открыта папка по умолчанию в Питоне. После этого директория была изменена при помощи os.chdir(). Затем была вызвана os.getcwd() еще раз, что продемонстрировало изменение директории.
os mkdir и os makedirs
Этот метод предназначен для создания новой папки в текущей. Выкидывает исключение OSError, если папка уже существует.
import os print(«Содержимое текущей директории:», os.listdir()) os.mkdir(‘new_scratches’) print(«Содержимое текущей директории:», os.listdir()) # Вывод: Содержимое текущей директории: [‘scratch.py’] Содержимое текущей директории: [‘new_scratches’, ‘scratch.py’]
os.makedirs — создаёт директорию, создавая при этом промежуточные директории.
import os print(«Содержимое текущей директории:», os.listdir()) os.makedirs(‘new_scratches/example’) print(«Содержимое текущей директории:», os.listdir()) os.chdir(os.getcwd() + r’\new_scratches’) print(«Содержимое директории new_scratches:», os.listdir()) # Вывод: Содержимое текущей директории: [‘scratch.py’] Содержимое текущей директории: [‘new_scratches’, ‘scratch.py’] Содержимое директории new_scratches: [‘example’]
os remove и os rmdir
Эта функция предназначена для удаления файлов.
import os print(«Содержимое текущей директории:», os.listdir()) os.remove(‘example.txt’) print(«Содержимое текущей директории:», os.listdir()) # Вывод: Содержимое текущей директории: [‘example.txt’, ‘scratch.py’] Содержимое текущей директории: [‘scratch.py’]
os.rmdir используется для удаления папок. Эта функция будет работать только для пустых директорий.
import os os.mkdir(‘example’) print(«Содержимое текущей директории:», os.listdir()) os.rmdir(‘example’) print(«Содержимое текущей директории:», os.listdir()) # Вывод: Содержимое текущей директории: [‘example’, ‘scratch.py’] Содержимое текущей директории: [‘scratch.py’]
os rename src dst
Функция os.rename() применяется для изменения имени файлов или папок.
import os os.mkdir(‘example’) print(«Содержимое текущей директории:», os.listdir()) os.rename(‘example’, ‘пример’) print(«Содержимое текущей директории:», os.listdir()) # Вывод: Содержимое текущей директории: [‘example’, ‘scratch.py’] Содержимое текущей директории: [‘scratch.py’, ‘пример’]
os startfile
Функция os.startfile() для того, чтобы открыть файл в ассоциированной с ним программе. Эта функция аналогична двойному щелчку по файлу в операционной системе.
import os print(«Содержимое текущей директории:», os.listdir()) os.startfile(‘example.py’) # Вывод: Содержимое текущей директории: [‘example.py’, ‘scratch.py’]
В результате выполнения этого кода файл ‘example.py’ откроется в программе по умолчанию. Если Питоновские файлы у Вас ассоциированы со средой обработки, то откроется в ней, иначе этот скрипт исполнится.
os walk
Функция os.walk() возвращает объект-генератор, из которого получают кортежи для каждого каталога переданной файловой иерархии.
Каждый кортеж состоит из трех элементов:
Адрес очередного каталога в виде строки.
В форме списка имена подкаталогов первого уровня вложенности для данного каталога.
В виде списка имена файлов данного каталога.
import os print(«Содержимое текущей директории:», os.listdir()) walk = os.walk(‘..’) for item in walk: print(item) # Вывод: … (‘..\scratches’, [], [‘example.py’, ‘scratch.py’]) (‘..\ssl’, [], []) …
os path
Модуль os.path включает в себя несколько функции для работы с путями файловой системы. Параметры пути должны быть переданы в формате строк или байтов. Вместо этого модуля рекомендуется использовать модуль pathlib, доступный в стандартной библиотеке Питона начиная с версии 3.4.
os path basename
Функция basename() модуля os.path возвращает базовое имя пути.
import os path = os.getcwd() print(«Текущая директория:», path) print(‘Базовое имя пути:’, os.path.basename(path)) # Вывод: Текущая директория: C:UsersDushenkoAppDataRoamingJetBrainsPyCharm2021.1scratches Базовое имя пути: scratches
os path dirname
Функция dirname возвращает ту часть пути, которую составляет каталог пути.
import os path = os.getcwd() print(«Текущая директория:», path) print(‘Базовое имя пути:’, os.path.dirname(path)) # Вывод: Текущая директория: C:UsersDushenkoAppDataRoamingJetBrainsPyCharm2021.1scratches Базовое имя пути: C:UsersDushenkoAppDataRoamingJetBrainsPyCharm2021.1
os path exists
Функция exists модуля os.path проверяет, существует ли указанный файл.
import os print(r’Существует ли путь C:Users:’, os.path.exists(r’C:Users’)) print(r’Существует ли путь C:Example:’, os.path.exists(r’C:Example’)) # Вывод: Существует ли путь C:Users: True Существует ли путь C:Example: False
os path isdir os path isfile
Функции isdir и isfile проверяют присутствие или отсутствие файлов или директорий в указанном пути. isdir проверяет наличие директории, а isfile — файла.
import os print(r’C:Users — это файл?’, os.path.isfile(r’C:Users’), sep=’n’) print(r’C:Users — это папка?’, os.path.isdir(r’C:Users’), sep=’n’) # Вывод: C:Users — это файл? False C:Users — это папка? True
os path join
В разных операционных системах используется разный разделитель пути. В Виндовс это бекслеш, а в Линукс – слеш.
Как же сделать объединение путей в Вашей программе универсальным?
Функция join предназначена для объединения нескольких путей в любой OS.
import os path = os.getcwd() print(«Текущая директория:», path) print(«Добавим ‘example’:», new_path := os.path.join(path, r»example»)) print(«Но существует ли этот путь?», os.path.exists(new_path)) # Вывод: Текущая директория: C:UsersDushenkoAppDataRoamingJetBrainsPyCharm2021.1scratches Добавим ‘example’: C:UsersDushenkoAppDataRoamingJetBrainsPyCharm2021.1scratchesexample Но существует ли этот путь? False
os path split
Метод split принимает путь и возвращает кортеж, состоящий из базового имени пути и каталога пути.
import os path = os.getcwd() print(«Текущая директория:», path) print(«Базовое имя пути:», os.path.split(path)[1], sep=’n’) print(«Каталог пути:», os.path.split(path)[0], sep=’n’) # Вывод: Текущая директория: C:UsersDushenkoAppDataRoamingJetBrainsPyCharm2021.1scratches Базовое имя пути: scratches Каталог пути: C:UsersDushenkoAppDataRoamingJetBrainsPyCharm2021.1
Подведем итоги
Модуль os предоставляет множество функций для работы с операционной системой, причём их поведение, как правило, не зависит от ОС, поэтому программы остаются переносимыми. Здесь будут приведены наиболее часто используемые из них.
Будьте внимательны: некоторые функции из этого модуля поддерживаются не всеми ОС.
Источник: pythoninfo.ru
Python-сообщество
- Начало
- » Python для новичков
- » Открыть файл приложением по умолчанию
#1 Дек. 23, 2008 09:17:02
Открыть файл приложением по умолчанию
#2 Дек. 23, 2008 09:26:51
Открыть файл приложением по умолчанию
import os
os.startfile(filename)
добавлено: Сорри, это только для windows
Отредактировано (Дек. 23, 2008 09:29:20)
#3 Дек. 24, 2008 06:59:34
Открыть файл приложением по умолчанию
Нужно обратится к приложению exo-open(если стоит XFCE), gnome-open(GNOME), для KDE — не знаю.
Попробовал открыть свой .vimrc, и exo, и gnome запускают одно и то же “умолчательное” приложение — GVim. Вероятно, настройки берутся из одного и того же места, вот только откуда? В каталоге .config вроде нет ничего, в переменных окружения — тоже.
UPD. Нашёл: ~/.local/share/applications/defaults.list
Отредактировано (Янв. 7, 2009 05:48:06)
Источник: python.su