Python не может прочитать временный файл - PullRequest
1 голос
/ 26 апреля 2020

У меня есть программа python, которая должна рассчитывать изменения на основе значения, записанного во временном файле (например, «12345 \ n»). Это всегда целое число.

Я пробовал разные методы для чтения файла, но python не смог его прочитать. Итак, у меня возникла идея выполнить команду оболочки («cat»), которая будет возвращать содержимое. Когда я выполняю это в оболочке, все работает нормально, но python обратная связь, которую я получаю, пуста. Затем я попытался написать bash, а затем php сценарий, который будет читать файл и затем возвращать значение. В python я вызывал их через оболочку, и получаемые отзывы тоже были пустыми.

Мне было интересно, не было ли это общей проблемой в python, и заставил мои скрипты возвращать содержимое других временных файлов , который работал нормально. Внутри моих скриптов я мог выполнять вычисления со значением, а в оболочке вывод получился именно таким, как ожидалось, но не при вызове через python. Я также заметил, что я не получаю значение с моими дополнительными сценариями, когда они вызываются phython (я пытался записать его в другой файл; он был обновлен, но пуст).

Файл, который я пытаюсь read находится в каталоге / tmp и записывается в несколько раз в секунду другим скриптом. Я ищу решение (открытое для новых идей), в котором я получаю значение файла в переменной python.

Спасибо за помощь

Вот мои программы :

python:

# python script
import subprocess

stdout = subprocess.Popen(["php /path/to/my/script.php"], shell = True, stdout = subprocess.PIPE).communicate()[0].decode("utf-8")

# other things I tried
#with open("/tmp/value.txt", "r") as file:
#   stdout = file.readline() # output = "--"
#stdout = os.popen("cat /tmp/value.txt").read() # output = "--"
#stdout = subprocess.check_output(["php /path/to/my/script.php"], shell = True, stdout = subprocess.PIPE).decode("utf-8") # output = "--"

print(str("-" + stdout + "-")) # output = "--"

php:

# php script
valueFile = fopen("/tmp/value.txt", "r");
value = trim(fgets($valueFile), "\n");
fclose($valueFile);
echo $value; # output in the shell is the value of $value

Редактировать: контекст: мой python скрипт запускается другим python скриптом , который слушает команды с сервера apache на пи. Значение, которое я хочу прочитать, исходит от устройства «1wire», которое прослушивает S0-сигналы.

...