Путь к временному файлу, возвращающий int python3 - PullRequest
0 голосов
/ 01 мая 2018

Хотелось бы узнать, есть ли способ найти путь к временному файлу без возврата int (в моем случае 15). Я хотел бы вернуть строку (или объект, в котором я могу затем превратиться в один, пожалуйста, подробно, как) путь - это путь к временному файлу (и его имя). Пример: /Users/FooBar/Python3.6/Modules/TempFile/Opus/THE_TEMP_FILE или что-то в этом роде. Я уже написал небольшой файл .wav для него и хотел бы получить путь для получения времени / продолжительности воспроизведения, используя os .stat (). Я хочу использовать временный файл, потому что я ленивый и не хочу делать много «специального» кода для четырех разных операционных систем, на которых я пытаюсь использовать эту программу. Вот мой код:

import pygame, time, os, tempfile
import urllib.request as ur

pygame.init() # Initialize the pygame
DISPLAYSURF = pygame.display.set_mode((1, 1)) # Sets display. Needed to play sound

sound = input('What sound should play: ') # Asks which sound
url = 'http://207.224.195.43:8000/' + sound # Gets server url
response = ur.urlopen(url) # Open url
data = response.read() # Create byte like object containing .wav code
f = tempfile.TemporaryFile() # Create TempFile
f.write(data) # Write .wav data gotten from server

f.seek(0) # Prepare to read it
soundObj = pygame.mixer.Sound(f.read()) # Load sound to be played
f.seek(0) # Prepare to read it
statbuf = os.stat(f.name) # Gets stats from TempFile. Returns int, I want to fix that
mbytes = statbuf.st_size / 1024 # Gets 'not real' sound duration
soundObj.play() # Plays sounds
time.sleep(mbytes / 200) # Gets 'real' sound duration and waits
soundObj.stop() # Stops sounds once done

Дайте мне знать (комментарий), если у вас есть какие-либо предложения. Я просмотрел несколько сайтов, один из которых был переполнен стеком, который вы могли ошибочно принять за дубликат этого вопроса. Речь шла о Django, который, как я понимаю, совершенно отличается от python. Спасибо за ответ на этот вопрос. Помните, я не ищу подтверждения по этому вопросу, я это уже знаю. Пожалуйста, дайте мне возможный ответ на вопрос как можно скорее. Спасибо!

- Пользователь 9311010

1 Ответ

0 голосов
/ 01 мая 2018

Весь смысл tempfile.TemporaryFile в том, что - это имя файла, если это вообще возможно:

… В Unix запись каталога для файла либо вообще не создается, либо удаляется сразу после создания файла. Другие платформы не поддерживают это; Ваш код не должен полагаться на временный файл, созданный с помощью этой функции, имеющий или не имеющий видимое имя в файловой системе.

Если вам нужен временный файл с доступным именем файла, используйте NamedTemporaryFile:

Эта функция работает точно так же, как и TemporaryFile(), за исключением того, что файл гарантированно имеет видимое имя в файловой системе ... Это имя может быть получено из атрибута name возвращенного файловоподобного объекта.


Однако я не думаю, что вам нужно имя файла. Вы хотите только один, чтобы у вас было что передать на stat? В Python 3.3+ вы можете передать файловый объект (например, f) в stat вместо его имени. В старых версиях вы можете использовать fstat с дескриптором файла (fileno()).

...