Запуск кода в виде исполняемого файла выдает ошибку - PullRequest
1 голос
/ 01 июля 2019

У меня есть следующий фрагмент кода в файле .py:

#!/usr/bin/env python3

import os
import shutil
shutil.rmtree(f"{os.getcwd()}/Logs")
os.makedirs(f"{os.getcwd()}/Logs")

, и когда я преобразовываю его в исполняемый файл с помощью chmod и запускаю его, я получаю сообщение об ошибке

FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/ Users / myname / Logs'

Почему это так, когда работает файл .pyпросто отлично, и как мне это исправить?

Редактировать: Я запускаю это с /Users/myname/Desktop не /Users/myname

Редактировать: Я извиняюсь, это было неясно, я хочу удалить и переделать папку с именем Logs в моем текущем каталоге, из которого я запускаю файл (мой Рабочий стол), но все os.getcwd() и Path.cwd() дают мне /Users/myname,не /Users/myname/Desktop

Ответы [ 3 ]

0 голосов
/ 01 июля 2019

Попробуйте удалить папку, Python вызовет исключение, если оно не существует, проигнорируйте исключение и создайте каталог заново. Кроме того, используйте pathlib, это значительно упрощает файловые операции.

#!/usr/bin/env python3

import shutil
from pathlib import Path

if __name__ == '__main__':
    logs = Path.cwd() / 'Logs'
    try:
        shutil.rmtree(logs)
    except FileNotFoundError:
        pass
    logs.mkdir(parents=True, exist_ok=True)

0 голосов
/ 01 июля 2019

Это зависит от того, как вы запускаете исполняемый файл. По подсказке

cd $HOME/Desktop
python3 ./myscript.py

запускает скрипт в каталоге Desktop, где, по-видимому, вы хотите его запустить.

cd $HOME
python3 ./Desktop/myscript.py

запускает скрипт в вашем домашнем каталоге, так как именно там вы в последний раз cd: ed..

(Если у скрипта есть правильные разрешения, не нужно явно указывать python3 перед именем скрипта - строки шебанга, которую вы там поместите, должно быть достаточно).

Если вы запускаете сценарий из IDE, такой как IDLE, pyCharm или VS Code, IDE может работать в том каталоге, который был текущим, когда вы его запустили, или в вашем домашнем каталоге просто потому, что именно там находятся графические приложения, с которых вы запускаете системное меню, как правило, работает. Некоторые приложения позволяют изменять рабочий каталог для проекта, файла или с помощью предпочтения приложения.

Если сценарий должен работать в определенном каталоге для правильной работы, возможно, подумайте о том, чтобы разрешить пользователю передавать каталог, в котором он хочет работать, в качестве параметра.

Кроме того, нет необходимости явно вызывать os.getcwd(); просто Logs относится к Logs в текущем каталоге - это очень буквально означает "текущий каталог".

0 голосов
/ 01 июля 2019

Это потому, что '/Users/myname/Logs' не существует, поэтому его нельзя удалить с помощью shutil.rmtree.

. Вы можете попробовать создать каталог вручную и снова запустить скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...