2017-02-05 10 views
1

Я создал сценарий, который при нажатии на него копирует все файлы в каталоге, где он был открыт на USB. Он работает внутри Pycharm, но когда я конвертирую его в исполняемый файл (когда я использую pyinstaller для преобразования .py в .exec), он не работает. Я почти уверен, что знаю, что случилось, но я не знаю, как это исправить.Как открыть терминал, в котором выполняется файл python

import shutil 
import os 

current = os.getcwd() 
list_of_files = os.listdir(current) 


def get_files(): 
    print('CURRENT: ' + current) 
    print('File_List: ' + str(list_of_files)) 

    for files in list_of_files: 
     shutil.copy(current + '/' + files, '/Volumes/U/Copy_things') 

get_files() 

Короче говоря, я использую os.getcwd(), поэтому файл знает, где он находится.
Когда я исполняю файл в PyCharm текущий каталог, os.getcwd() дает мне это

ТОК:/Users/MainFrame/Desktop/python_test_hub/move_file_test

Но когда я открываю исполняемый (та же папка как .py файл) и терминал открывает os.getcwd() дает мне это

ТОК:/Users/MainFrame

Поэтому мне нужно найти способ, исполняемый файл, чтобы открыть терминал, где , поэтому он может копировать эти файлы. Я хочу, чтобы иметь возможность выполнить его из любой папки и скопировать файлы на USB.

+0

«когда я преобразовать его в исполняемый файл не работает» - вы должны разработать немного больше об этом шаге. – yedpodtrzitko

+0

@yedpodtrzitko Когда я использую pyinstaller для преобразования .py в .exec –

+0

, запустите .exe в консоли/терминале, чтобы увидеть ошибки. – furas

ответ

1

os.getcwd() получает каталог, из которого выполняется сценарий, и это не обязательно, где находится скрипт. Pycharm, скорее всего, изменяет этот путь при выполнении сценария, поскольку он выполняет ваш скрипт из пути к проекту, а не по пути python.

Попробуйте os.path.abspath(os.path.dirname(os.sys.argv[0])) вместо os.getcwd().

Эти ответы имеют больше информации: os.getcwd() vs os.path.abspath(os.path.dirname(__file__))

Difference between __file__ and sys.argv[0]

+0

Я изменил os.getcwd() на os.path.abspath (os.path.dirname (__ file__))) но он все равно переносит меня в/Users/MainFrame при запуске exec –

+0

Попробуйте 'os.path.abspath (os.path.dirname (os.sys.argv [0]))' Я протестировал этот, и он работал для меня , – Matts

+0

Это сработало! Спасибо, Не знаю, почему я думаю, мне придется больше почитать, но спасибо. –