Python открыть файл программой по умолчанию

Мне нужно открыть документ, используя его приложение по умолчанию в 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’]

Читайте также:
Movavi video editor плюсы и минусы программы

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-сообщество

[RSS Feed]

  • Начало
  • » 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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru