Сервис Systemd не записывает скрипт Python в файл, скрипт Python запускается номинально при запуске из

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

from numpy import matrix

def fib(n):
    return (matrix('0 1; 1 1', dtype='object') ** n).item(1)

Это быстро, поскольку numpy использует алгоритм быстрого возведения в степень. Вы получаете ответ в O (log n). И это лучше, чем формула Бине, потому что она использует только целые числа. Но если вы хотите, чтобы все числа Фибоначчи были до n, тогда лучше сделать это путем запоминания.

0
задан medright 26 March 2019 в 16:25
поделиться

2 ответа

Атрибут file для StandardOutput стал доступен только с systemd версией 236. Какая у вас версия?

pi@wifi-relay:~ $ systemd --version

systemd 232
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN

Если она меньше версии 236 и вы не можете / don Если вы не хотите обновляться, вы можете просто обновить строку ExecStart до:

/usr/bin/python3 -u /home/pi/bme.py >1 /home/pi/senselog.csv

... затем вернуть строку StandardOutput к значению по умолчанию.

0
ответ дан stevieb 26 March 2019 в 16:25
поделиться

Таким образом, решение состоит в том, чтобы на самом деле вызвать .close () для файла, в который мы пишем сценарий python, тогда служба systemd работает, как и ожидалось. Обращайтесь к этой теме: https://askubuntu.com/questions/83549/python-script-wont-write-data-when-ran-from-cron последний ответ = f.close ()

и рабочий файл скрипта:

from time import strftime
import board
import busio
import adafruit_bme280

# Create library object using our Bus I2C port
i2c = busio.I2C(board.SCL, board.SDA)
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c,address=0x76)

# OR create library object using our Bus SPI port
#spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
#bme_cs = digitalio.DigitalInOut(board.D10)
#bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs)

# change this to match the location's pressure (hPa) at sea level
bme280.sea_level_pressure = 1013.25

with open("/home/pi/senselog.csv", "w") as log:
    while True:

        temp_h = bme280.temperature
        humidity = bme280.humidity
        pressure = bme280.pressure
        log.write("{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),str([temp_h,humidity,pressure])))
        log.close()
        time.sleep(60) ```
0
ответ дан medright 26 March 2019 в 16:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: