У меня есть несколько файлов, хранящихся в папке controlFiles. Путь к этой папке - «Пользователи/Рабочий стол/myproject/controlFiles».Python: проблема с абсолютным путем
Я пытаюсь выполнить команду подпроцесс в моем питон скрипт со следующим кодом:
def codeml(codeml_location, control_location):
runPath = codeml_location + '/codeml'
for file in os.listdir(control_location):
ctlPath = os.path.abspath(file)
subprocess.call([runPath, ctlPath])
Функция скрипта является запуск инструмента командной строки под названием codeml, с первым аргументом является местом из codeml, а второй - папка управляющих файлов, которую использует codeml. Когда я запускаю этот скрипт codeml бежит, но я получаю ошибку:
error when opening file /Users/Desktop/myproject/subtree.39.tre.ctl
tell me the full path-name of the file?
Моя путаница происходит из того факта, что папка controlFiles не в этом пути, но он по-прежнему идентифицирует файлы в папке.
Чтобы проверить, я был введен правильный аргумент control_location я редактировал код, например:
def codeml(codeml_location, control_location):
runPath = codeml_location + '/codeml'
for file in os.listdir(control_location):
print os.path.abspath(file)
Запуск этой отпечатанные все файлы в папке controlFiles, но опять же без папки в пути. Вот образец распечатки:
/Users/Desktop/myproject/subtree.68.tre.ctl
/Users/Desktop/myproject/subtree.69.tre.ctl
/Users/Desktop/myproject/subtree.70.tre.ctl
/Users/Desktop/myproject/subtree.71.tre.ctl
Чтобы запустить функцию моего контроля местоположения аргумент:
control_location = /Users/Desktop/myproject/controlFiles
Заключительное Дело в том, что мой рабочий каталог в терминале/Users/Desktop/myproject, и это потому, что это местоположение моего проекта Click. Почему файлы берутся, но не содержит их папку?
Hi Daniel. Это работает для перечисления всех имен файлов при использовании print ctlPath, но причудливо я все еще получаю ту же проблему при использовании ctlPath в моей команде подпроцесса. Я также попытался поместить os.path.abspath (os.path.join (control_location, file)) непосредственно в команду подпроцессора, а не создавать переменную, но все равно та же проблема. – spiral01
затем покажите свой код команды подпроцесса. – Daniel
Как и выше, команда подпроцесса: subprocess.call ([runPath, ctlPath]) – spiral01