Как сделать проводник python

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Я хотел бы получить путь к файлу в качестве ввода в моем консольном приложении Python.

В настоящее время я могу запросить только полный путь в качестве входа в консоль.

есть ли способ вызвать простой пользовательский интерфейс, где пользователи могут выбрать файл вместо ввода полного пути?

Как насчет использования tkinter?

Python 3.x версия ответа Etaoin для полноты:

С EasyGui (документацию pydoc и epydoc для версии 0.96):

использовать tkFileDialog модуль который часть стандартной установки.

У меня была ситуация, когда я разрабатывал серверное приложение Python (без компонента GUI) и, следовательно, не хотел вводить зависимость от каких-либо наборов инструментов Python GUI, но я хотел, чтобы некоторые из моих сценариев отладки были параметризованы входными файлами и хотели визуально запрашивать у пользователя файл, если они не указали его в командной строке. Зенити идеально подходила. Добиться этого, вызовите "zenity --file-selection" с помощью модуля подпроцесса и захватите stdout. Конечно, это решение не зависит от Python.

Zenity поддерживает несколько платформ и уже установлен на наших серверах dev, поэтому он облегчил нашу отладку/разработку без введения нежелательной зависимости.

необходимо из скрипта открыть папку..так чтоб ее содержимое отображалось в стандартном виндовом проводнике..

открыть папку через проводник..

Т.е. нужно вызвать из скрипта проводник - explorer “c:\program Files”

открыть папку через проводник..

открыть папку через проводник..

не стал заводить новую тему, у меня такой вопрос, как вызвать проводник и через проводник указать путь к файлу. Такое окно есть в любой программе,Ctrl+O если нажать оно появляется.

Вместо сценариев оболочки, которые могут стать сложными и утомительными, мы можем использовать Python для автоматизации команд оболочки. В этом уроке мы узнаем, как запускать их ради масштабируемости и ремонтопригодности проектов Python.

Вступление

Повторяющиеся задачи созрели для автоматизации. Обычно разработчики и системные администраторы автоматизируют рутинные задачи, такие как проверка работоспособности и резервное копирование файлов с помощью сценариев оболочки. Однако по мере того, как эти задачи становятся все более сложными, скрипты оболочки могут становиться все труднее поддерживать.

К счастью, мы можем использовать Python вместо shell-скриптов для автоматизации. Python предоставляет методы для выполнения команд оболочки, предоставляя нам ту же функциональность, что и скрипты этих оболочек. Изучение того, как выполнять команды оболочки на Python, открывает нам возможность автоматизировать компьютерные задачи структурированным и масштабируемым способом.

В этой статье мы рассмотрим различные способы выполнения команд оболочки в Python и идеальную ситуацию для использования каждого метода.

Использование os.system для выполнения команды

Python позволяет нам немедленно выполнить команду оболочки, которая хранится в строке, используя функцию os.system () .

Давайте начнем с создания нового файла Python под названием echo_adelle.py и введите следующее:

Первое, что мы делаем в нашем файле Python, – это импортируем модуль os , который содержит функцию system , которая может выполнять команды оболочки. Следующая строка делает именно это, запускает команду echo в нашей оболочке через Python.

В вашем терминале запустите этот файл с помощью следующей команды, и вы увидите соответствующий вывод:

Поскольку команды echo выводятся на наш stdout , os.system() также выводит вывод на наш stdout поток. Хотя команда os.system() не отображается в консоли, она возвращает код выхода команды оболочки. Код выхода 0 означает, что он работал без каких-либо проблем, а любое другое число означает ошибку.

Давайте создадим новый файл с именем cd_return_codes.py и введите следующее:

В этом скрипте мы создаем две переменные, которые хранят результат выполнения команд, изменяющих каталог на домашнюю папку, и на папку, которая не существует. Запустив этот файл, мы увидим:

Первая команда, которая изменяет каталог на домашний, выполняется успешно. Поэтому os.system() возвращает свой код выхода ноль, который хранится в home_dir . С другой стороны, unknown_dir хранит код выхода неудачной команды bash для изменения каталога на несуществующую папку.

Функция os.system() выполняет команду, выводит любой вывод команды на консоль и возвращает код выхода команды. Если мы хотим более тонкого управления вводом и выводом команды оболочки в Python, мы должны использовать модуль subprocess .

Выполнение команды с подпроцессом

Модуль subprocess – это рекомендуемый Python способ выполнения команд оболочки. Это дает нам гибкость подавлять вывод команд оболочки или цепочку входов и выходов различных команд вместе, в то же время обеспечивая аналогичный опыт os.system() для основных случаев использования.

В новом файле под названием list_subprocess.py , напишите следующий код:

Примечание: Как правило, вам нужно разделить аргументы на основе пробела, например ls-alh будет ["ls", "-alh"] , в то время как ls-a -l -h будет ["ls", "-a", - "l", "-h"] . В качестве другого примера echo hello world будет ["echo", "hello", "world"] , тогда как echo "hello world" или echo hello\ world будет ["echo", "hello world"] .

Запустите этот файл, и вывод вашей консоли будет похож на:

Стандартный вывод команды теперь передается на специальное устройство /dev/null , что означает, что вывод не будет отображаться на наших консолях. Выполните файл в вашей оболочке, чтобы увидеть следующие выходные данные:

Запуск этого файла приводит к следующим выводам:

Мы также можем вызвать Исключение без ручной проверки возвращаемого значения. В новом файле, false_subprocess.py , добавьте код ниже:

В вашем терминале запустите этот файл. Вы увидите следующую ошибку:

Используя check=True , мы говорим Python вызывать любые исключения, если возникает ошибка. Поскольку мы действительно столкнулись с ошибкой, оператор print в последней строке не был выполнен.

Запуск команды с помощью Popen

Подпроцесс .Класс Popen предоставляет разработчику больше возможностей при взаимодействии с оболочкой. Однако нам нужно быть более откровенными в отношении получения результатов и ошибок.

По умолчанию используется подпроцесс.Popen не останавливает обработку программы Python, если ее команда не закончила выполнение. В новом файле под названием list_popen.py , введите следующее:

Этот код эквивалентен коду list_subprocess.py . Он запускает команду с помощью подпроцесса .Popen и ждет его завершения , прежде чем выполнить остальную часть скрипта Python.

Допустим, мы не хотим ждать, пока наша команда оболочки завершит выполнение, чтобы программа могла работать над другими вещами. Как он узнает, когда команда оболочки завершит выполнение?

Метод poll() возвращает код выхода, если команда закончила выполнение, или None , если она все еще выполняется. Например, если бы мы хотели проверить, был ли list_dir завершен, а не ждать его, у нас была бы следующая строка кода:

Для управления вводом и выводом с помощью подпроцесса .Popen , нам нужно использовать метод communicate () .

В новом файле под названием cat_popen.py , добавьте следующий фрагмент кода:

Метод communicate() принимает аргумент input , который используется для передачи входных данных команде оболочки. Метод communicate также возвращает оба параметра stdout и stderr , когда они установлены.

Увидев основные идеи, лежащие в основе подпроцесса.Popen , теперь мы рассмотрели три способа запуска команд оболочки в Python. Давайте еще раз рассмотрим их характеристики, чтобы узнать, какой метод лучше всего подходит для требований проекта.

Какой из них я должен использовать?

Вот таблица с некоторыми различиями в удобстве использования, которые вы также можете использовать для обоснования своего решения:

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null .

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

Читайте также: