Я хотел бы использовать относительные пути вместе с модулем подпроцесса, чтобы иметь возможность запускать разные исполняемые файлы.
Для получения относительных путей и, прочитав разные темы, я думаю, что модуль pathlib - лучший вариант для этого.
Предположим, у меня есть скрипт Python в определенной папке в Windows. Внутри нее (предыдущая папка) у меня есть другие папки с исполняемыми файлами, которые я хочу запустить. Вот он, когда приходит модуль подпроцесса. Однако я не знаю, как включить относительные пути, созданные с помощью модуля pathlib, в поле аргументов подпроцесса.
Из API подпроцесса я могу прочитать, что «аргументы должны быть последовательностью аргументов программы или одной строкой».
import pathlib
import subprocess
in_file_1 = pathlib.Path.cwd() / "folder2" / "folder3" / "whatever.exe"
p = subprocess.Popen(str(in_file_1), shell = True)
Я ожидаю увидеть процесс what.exe, работающий в задачах администратора, но процесс не запущен. Как я могу этого добиться? Есть ли что-то, что я вникаю? Должен ли я просто указать относительный путь, откуда сохранен скрипт Python?
Да, я уверен насчет местоположения whatever.exe. Если я сохраню скрипт python в той же папке, что и whatever.exe, приведенный выше код работает, но если я сохраню его вверх по течению, whatever.exe не работает, даже указав относительный путь к нему.
Вы используете pathlib.Path.cwd(), поэтому важен текущий каталог при запуске скрипта, а не то, где находится скрипт.
Это то, что я пытаюсь сделать с «in_file_1», чтобы получить текущее местоположение скрипта Python. Но даже с этим я не могу заставить его работать. Спасибо за ваши комментарии @nicoco






Вы путаете сТекущая жРаботающая дКаталог, который возвращает pathlib.Path.cwd(), с расположением скрипта.
Если вам нужен каталог сценария, вы можете использовать __file__, например, так:
import pathlib
cwd = pathlib.Path.cwd()
script_file = pathlib.Path(__file__)
script_location = script_file.parent
print("The current dir is", pathlib.Path.cwd())
print("The current script is", script_file)
print("The current script's dir is", script_file.parent)
который вернет:
The current dir is /home/nicoco
The current script is /tmp/so.py
The current script's dir is /tmp
Спасибо за вашу помощь @nicoco. Теперь он работает отлично. Я не понял о местоположении сценария! Я только что указал «whatever.exe» в качестве аргумента для «subprocess.Popen» и указал путь с аргументом cwd. Еще раз, спасибо!
Я только что проверил ваш фрагмент, и все работает так, как ожидалось. Вы уверены в своем местонахождении
whatever.exe? Почему вы хотите использовать текущий рабочий каталог?