Почему запись в %appdata% из версии Python для Магазина Windows не работает?Python

Программы на Python
Ответить
Anonymous
 Почему запись в %appdata% из версии Python для Магазина Windows не работает?

Сообщение Anonymous »

Я пытался записать данные в %appdata%. Казалось, все работает так, как показано в выводе Script1. Создаются новые каталоги, файл сохраняется, а данные также успешно извлекаются. Но при попытке посмотреть данные в проводнике папки не оказалось! CMD тоже не смог найти файл и каталог.
Позже я создал файл вручную и проверил, что произошло. Теперь CMD мог найти файл (который я только что создал вручную), но при попытке прочитать файл с помощью Python он вывел мне тестовые данные содержимого файла-призрака Python 123, а не то, что я только что в него записал! Я также дважды проверил с помощью WSL, что новый файл действительно содержит тестовые данные 456.
Почему это происходит и как я могу решить эту проблему?
Script1 (Создание файла с тестовыми данными 123):
import os
import subprocess

appdata = os.getenv('APPDATA')
directory_path = f"{appdata}\\com-company\\prod-product-version3"
file_path = directory_path + "\\file1.txt"

print(f"Directories Exist: {os.path.exists(directory_path)}")
if not os.path.exists(directory_path):
os.makedirs(directory_path)
print("Directories created")
print(f"Directories Exist: {os.path.exists(directory_path)}")

print(f"File Exist: {os.path.exists(file_path)}")
print(f"Writing File: {file_path}")
with open(file_path, 'w')as fp:
fp.write("test data 123")
print(f"File Exist: {os.path.exists(file_path)}")

print(f"Reading File: {file_path}")
with open(file_path, 'r')as fp:
print(f"File Content: {fp.read()}")

print('---------------------')
cmd = f"dir {directory_path}"
try:
output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, text=True)
print(output)
except subprocess.CalledProcessError as e:
print(f'Error: {e}')
print(f'Error message:\n{e.output}')

print('---------------------')
cmd = f"dir {file_path}"
try:
output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, text=True)
print(output)
except subprocess.CalledProcessError as e:
print(f'Error: {e}')
print(f'Error message:\n{e.output}')

Выход:
Directories Exist: False
Directories created
Directories Exist: True
File Exist: False
Writing File: C:\Users\one\AppData\Roaming\com-company\prod-product-version3\file1.txt
File Exist: True
Reading File: C:\Users\one\AppData\Roaming\com-company\prod-product-version3\file1.txt
File Content: test data 123
---------------------
Error: Command 'dir C:\Users\one\AppData\Roaming\com-company\prod-product-version3' returned non-zero exit status 1.
Error message:
The system cannot find the file specified.

---------------------
Error: Command 'dir C:\Users\one\AppData\Roaming\com-company\prod-product-version3\file1.txt' returned non-zero exit status 1.
Error message:
The system cannot find the path specified.

Создание C:\Users\one\AppData\Roaming\com-company\prod-product-version3\file1.txt вручную и запись в него данных:
test data 456

Script2 (чтение тестовых данных 123, даже если они содержат тестовые данные 456):
import os
appdata = os.getenv('APPDATA')
directory_path = f"{appdata}\\com-company\\prod-product-version3"
file_path = directory_path + "\\file1.txt"

print(f"File Exist: {os.path.exists(file_path)}")

print(f"Reading File: {file_path}")
with open(file_path, 'r')as fp:
print(f"File Content: {fp.read()}")

Выход:
File Exist: True
Reading File: C:\Users\one\AppData\Roaming\com-company\prod-product-version3\file1.txt
File Content: test data 123

Двойная проверка с помощью WSL:
cat /mnt/c/Users/one/AppData/Roaming/com-company/prod-product-version3/file1.txt
Output: test data 456

PS:
Я перезагрузил свою систему, а Python все еще думает, что файл содержит тестовые данные 123.
И запись обычно работает нормально:
with open('C:\\Users\\one\\Desktop\\file2.txt', 'w') as fp:
fp.write('test data 789')


Подробнее здесь: https://stackoverflow.com/questions/760 ... n-not-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»