





От Командная строка Windows Explorer Джеффа Чаппелла
import subprocess
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"')
ха-ха, я читал запятую как сумматор, я думал, что WTF происходит. Это часть струны.
По какой-то странной причине в моей системе Windows 10 это просто открывает пользовательские библиотеки проводника с фокусом «Мои документы».
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"') работает, но как мне поместить это окно поверх других окон, если пользователь переходит в какое-то другое окно после выполнения этого оператора где-то в своей программе?
@Nik Это похоже на год позже, но я думаю, причина в том, что ваш путь к файлу не указывает на конкретный файл. Кажется, вы не можете просто указать на каталог.
Рабочая ссылка (на данный момент) на параметры командной строки: geoffchappell.com/studies/windows/shell/explorer/cmdline.htm
Использование этого метода даст мне код возврата 1, даже если окно проводника открывается правильно и выбирает файл. Кто-нибудь знает, почему это, может быть, само по себе стоит вопроса? (Я получаю код возврата 1, если использую строковую команду с os.system, subprocess.call или subprocess.Popen и запрашиваю код возврата.)
У меня та же проблема, что и у @MisterGeeky, он просто открывает «Мои документы». Я почти уверен, что это как-то связано с обратной косой чертой ...
Я забыл добавить comma (,) между /select и path, тогда My Documents открывается. т.е. explorer /select,"C:\path\of\folder\file" правильный, а не этот explorer /select "C:\path\of\folder\file"
Хороший ресурс для параметров CMD проводника: ss64.com/nt/explorer.html
если вы используете косую черту в пути к файлу, сделайте filepath.replace ('/', '\\'), чтобы он был похож на C: \ path \ of \ folder \ file
По какой-то причине в Windows 7 он всегда открывает путь пользователей, для меня сработало следующее:
import subprocess
subprocess.call("explorer C:\\temp\\yourpath", shell=True)
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"') работает, но как мне поместить это окно поверх других окон, если пользователь переходит в какое-то другое окно после выполнения этого оператора где-то в своей программе?
Это должно автоматически появиться спереди
Старайтесь избегать использования shell=True tho! security.openstack.org/guidelines/…
Пока вы знаете, где используете, и это в закрытой среде, это нормально.
Более приятное и безопасное решение (к сожалению, только в Windows) - os.startfile ().
Когда ему дается папка вместо файла, он откроет проводник.
Я знаю, что не могу полностью ответить на этот вопрос, поскольку не выбираю файл, но использование subprocess всегда является плохой идеей, и это решение может помочь другим людям.
Да, конечно, я понимаю, что небезопасно, но я был в полной безопасности :) Спасибо за ваш совет, хотя это тоже помогло мне (да, на протяжении многих лет)
Не очень кросс-ОС, startfile существует только в Windows (stackoverflow.com/questions/29823028/…).
Еще один облом: os.startfile() не принимает аргументы ☹ Хотя в случае с проводником кажется несложным отсоединить процесс через subprocess.run или Popen
Поскольку explorer можно переопределить, было бы безопаснее указывать непосредственно на исполняемый файл. (просто тоже должно было быть учился на этом)
И пока вы это делаете: используйте текущий API подпроцесса Python 3: run()
import os
import subprocess
FILEBROWSER_PATH = os.path.join(os.getenv('WINDIR'), 'explorer.exe')
def explore(path):
# explorer would choke on forward slashes
path = os.path.normpath(path)
if os.path.isdir(path):
subprocess.run([FILEBROWSER_PATH, path])
elif os.path.isfile(path):
subprocess.run([FILEBROWSER_PATH, '/select,', path])
В качестве альтернативы вы можете использовать модуль fileopenbox EasyGUI, чтобы открыть файловый менеджер, чтобы пользователь мог щелкнуть по нему, а затем выбрать файл (возвращая полный путь к файлу).
import easygui
file = easygui.fileopenbox()
Для тех, кто задается вопросом, как использовать переменную вместо прямого пути к файлу. Приведенный ниже код откроет проводник и выделит указанный файл.
import subprocess
subprocess.Popen(f'explorer /select,{variableHere}')
Приведенный ниже код просто откроет указанную папку в проводнике, не выделяя какой-либо конкретный файл.
import subprocess
subprocess.Popen(f'explorer "{variableHere}"')
Я тестировал только на окнах
Я знаю, что это очень старый пост, но его стоит попробовать. У меня есть модуль, который подключает библиотеку документов sharepoint к окну проводника Windows, чтобы копия, прошедшая локально, загружалась в библиотеку документов sharepoint. Иногда его нужно обновлять, и я использую селен для повторного подключения, но теперь у меня открыто окно проводника Windows. Я не знаю, как закрыть это окно, чтобы графический интерфейс приложения снова стал фокусом для конечного пользователя. Есть идеи, как выбрать это окно и закрыть его?