我正在raspbian上运行python 3脚本,该脚本必须将字符串值写入配置文件。
->使用VS代码调试脚本(远程调试器)时,该值已正确写入config.txt。
->将脚本作为服务运行:sudo systemctl start myservice
时,该值未写入config.txt。
在两种情况下,脚本都毫无例外地运行到最后。
/ home / pi / project / my-script.py
import configparser
import logging
config = configparser.ConfigParser()
configFilePath = r'/home/pi/project/config.txt'
config.read(configFilePath)
cfg = config['main']
sid = cfg['sid']
def configWrite(field, value):
config.set('main', field, value)
with open(configFilePath, 'w') as configfile:
config.write(configfile)
def authenticate():
authenticate_url = '...'
headers = { ... }
try:
response = requests.post(authenticate_url, headers=headers, timeout=(30, 10))
response.raise_for_status()
except Exception as err:
logging.warning('Error occurred: {}'.format(err))
return False
else:
global sid
sid = response.json()['sid']
configWrite('sid', str(sid))
return True
def main()
authenticate()
if __name__ == '__main__':
main()
/ home / pi / project / config.txt(更改为666)
[main]
sid = dummy
/ etc / systemd / system / myservice.service
[Unit]
Description=My service description
After=network.target
[Service]
ExecStart=/usr/bin/python3 -u my-script.py
WorkingDirectory=/home/pi/project
StandardOutput=Inherit
StandardError=Inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
我不确定,但似乎您从未将config ['main']设置为新值。尝试configWrite(field,value):config ['main'] = {field:value},然后像bevor一样将其写入到config.txt中。