#python-3.x #subprocess #filepath
#python-3.x #подпроцесс #путь к файлу
Вопрос:
Я работаю с IDLE на Mac и пытаюсь создать небольшую программу, которая открывает случайный файл из папки (на самом деле это тест для более крупного проекта). В папке у меня есть много типов файлов, таких как «.blend», «.m4a», «.py» и «.webloc», но я ожидаю, что в будущем их будет еще больше. Я хотел бы, чтобы мой код открывал случайный файл с их соответствующей программой (Blender, QuickTime Player, IDLE, Chrome …), но пока я не нашел никакого способа сделать это. Возможно ли это? Максимум, что я смог сделать, это открыть Google Chrome со своего компьютера с Windows. Это не работает на моем Mac (возможно, потому, что это .app вместо .exe?), и я могу открывать только программы, но не файлы. Вот код, который я использовал для этого:
import subprocess
subprocess.Popen(['C:Program Files (x86)GoogleChromeApplication\chrome.exe', '-new-tab'])
Когда я ввожу это на Mac (но с правильным путем к файлу для Mac):
import subprocess
subprocess.Popen(['/Applications/Google Chrome.app', '-new-tab'])
Это выдает мне эту ошибку (может быть, потому, что путь к файлу написан неправильно? Я скопировал его, щелкнув правой кнопкой мыши по файлу Chrome и нажав «копировать как путь»):
>>>
=============== RESTART: /Users/jaimewalter/Desktop/Test/Test3.py ==============
Traceback (most recent call last):
File "/Users/jaimewalter/Desktop/Test/Test3.py", line 3, in <module>
subprocess.Popen(['/Applications/Google Chrome.app', '-new-tab'])
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess.py", line 1702, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
PermissionError: [Errno 13] Permission denied: '/Applications/Google Chrome.app'
>>>
И вот мой код для выбора случайного файла:
import random
files = ["Test1.blend", "Test2.m4a", "Test3.py", "Test4.webloc"]
open_this = random.choice (files)
print(open_this)
if open_this == "Test1.blend":
print("Opening Test1.blend")
#now it should open Test1.blend on a new Blender window (/Users/jaimewalter/Desktop/Test/Test1.blend)
elif open_this == "Test2.m4a":
print("Opening Test2.m4a")
#now it should open Test2.m4a on a new QuickTime Player window (/Users/jaimewalter/Desktop/Test/Test2.m4a)
elif open_this == "Test3.py":
print("Opening Test3.py")
#now it should open Test3.py on a new IDLE window or preferably runs the code inside directly it if that's possible (/Users/jaimewalter/Desktop/Test/Test3.py)
elif open_this == "Test4.webloc":
print("Opening Test4.webloc")
#now it should open Test4.webloc on a new Chrome or Safari window (/Users/jaimewalter/Desktop/Test/Test4.webloc)
Что я должен использовать для открытия файлов внутри кода? Заранее спасибо
Ответ №1:
Я уже решил это. Я использовал
import subprocess
subprocess.call(["open", "Test1.blend"])
Я думаю, что с Linux это xdg-open