AWS Greengrass V2 中的语法错误 hello_world.py

syntax error in AWS Greengrass V2 hello_world.py

我正在试验 AWS IoT greengrass V2。我只是在遵循具有以下 python 代码的手册:

import sys
import datetime

message = f"Hello, {sys.argv[1]}! Current time: {str(datetime.datetime.now())}."

# Print the message to stdout.
print(message)

# Append the message to the log file.
with open('/tmp/Greengrass_HelloWorld.log', 'a') as f:
    print(message, file=f)

根据我的日志记录,第 4 行中存在语法错误。将第 4 行替换为以下内容可以正常工作:

message = "Hello"

有没有人看出这行有什么问题:

message = f"Hello, {sys.argv[1]}! Current time: {str(datetime.datetime.now())}."

谢谢。

我是 AWS IoT Greengrass 的文档编写者之一。

格式化字符串文字 (f"some content") 是 Python 3.6+ 的一个特性,这种语法在早期版本中会导致语法错误。入门教程要求错误地将 Python 3.5 列为要求,但 Python 3.5 不支持格式化字符串文字。我们会将此要求更新为 3.6 或更新脚本以删除格式化字符串文字。

要解决此问题,您可以升级到 Python 3.6+ 或修改脚本以删除格式化字符串文字。感谢您发现这个问题!

郑重声明:我更改了代码,避免了 f"stringliteral" :

import sys
import datetime

constrmessage ="Hello, ",str(sys.argv[1])," "+str(datetime.datetime.now())
#change from tuple to string
message = ''.join(constrmessage)
#print message to screen
print(message)

original_stdout = sys.stdout

# Append the message to the log file.
with open('/tmp/Greengrass_HelloWorld.log', 'a') as f:
    sys.stdout = f
    print(message)
    sys.stdout = original_stdout