Я запускаю Python 3.13.5 через PowerShell в Windows 10. Я могу успешно выполнить следующую команду и теперь хочу запустить ее с помощью скрипта Python
Код: Выделить всё
& 'D:\realesrgan\realesrgan-ncnn-vulkan.exe' -i 'D:\test.png' -o 'D:\output.png'. Как вы это делаете?
Ниже приведена очень длинная цепочка ошибок, с которыми я столкнулся, пытаясь это сделать. Я публикую это для тех, кто ищет в Интернете, так как чувствую, что я не единственный, кто столкнулся с этим.
Я пробовал:
import subprocess
args = ["& 'D:\realesrgan\realesrgan-ncnn-vulkan.exe' -i 'D:\test.png' -o 'D:\output.png'"]
result = subprocess.run(args)
И получил ошибку FileNotFoundError: [WinError 2] Система не может найти указанный файл, потому что мне нужно было вызвать его с помощью оболочки = True. Итак, я попробовал:
Код: Выделить всё
import subprocess
args = ["& 'D:\realesrgan\realesrgan-ncnn-vulkan.exe' -i 'D:\test.png' -o 'D:\output.png'"]
result = subprocess.run(args, shell = True)
И получил ошибку. Синтаксис имени файла, имени каталога или метки тома неверен. потому что мне нужно было использовать двойные косые черты \\ и разбить его на список по пробелам. Итак, я попробовал:
Код: Выделить всё
import subprocess
args = ["&", "'D:\\realesrgan\\realesrgan-ncnn-vulkan.exe'", "-i", "'D:\\test.png'", "-o", "'D:\\output.png'"]
result = subprocess.run(args, shell = True)
И возникла ошибка, которая в этот раз была неожиданной. потому что подпроцесс запускается в командной строке, а не в PowerShell. Итак, я узнал, что мне нужно удалить &, а также заменить одинарные кавычки ' на двойные' , поэтому я попробовал:
Код: Выделить всё
import subprocess
args = ['"D:\\realesrgan\\realesrgan-ncnn-vulkan.exe"', '-i', '"D:\\test.png"', '-o', '"D:\\output.png"']
result = subprocess.run(args, shell = True)
Появилась ошибка. Неверный синтаксис имени файла, имени каталога или метки тома.. Какую следующую ошибку мне не хватает? На данный момент я знаю, что команда "D:\\realesrgan\\realesrgan-ncnn-vulkan.exe" -i "D:\\test.png" -o "D:\\output.png" работает в командной строке. Однажды мне удалось зарегистрировать .exe, но он удалил параметры, которые я передавал, и я не могу воссоздать код, благодаря которому это произошло. Может быть что-то не так с использованием subprocess.call() вместо subprocess.run()?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... via-python