在字符串之间使用环境变量?
Use environmental variables in between strings?
我有一个字符串
start = """<?xml version="1.0" encoding="utf-8" ?><soap:Envelope \
xmlns="http://tempuri.org/"> \
<UserName>username</UserName><Password>password</Password>\
xmlns="http://tempuri.org/"><oShipData>"""
我想为用户名和密码使用环境变量,而不是在代码中对它们进行硬编码,我尝试了这个
import os
start = """<?xml version="1.0" encoding="utf-8" ?><soap:Envelope \
xmlns="http://tempuri.org/"> \
<UserName>"""os.environ["username"]"""</UserName><Password>"""os.environ["password"]"""</Password>
xmlns="http://tempuri.org/"><oShipData>"""
但这给了我一个错误:
"errorMessage": "Syntax error in module 'test': invalid syntax (test.py, line 5)",
"errorType": "Runtime.UserCodeSyntaxError"
如何转义字符串并从字符串中的 os.environ
动态获取值?
您可以在 python 中添加字符串。所以 "teststring"
是一个普通的字符串,但是 "test"+variable+"string"
会得到一个字符串,中间有 variable 的值,假设 variable 是 string 类型。如果不是,请使用 "test"+str(variable)+"string"
.
import os
start = """<?xml version="1.0" encoding="utf-8" ?><soap:Envelope \
xmlns="http://tempuri.org/"> \
<UserName>"""+str(os.environ["username"])+"""</UserName><Password>"""+str(os.environ["password"])+"""</Password>
xmlns="http://tempuri.org/"><oShipData>"""
应该可以。
你不能只把字符串和代码放在一起,你可以用 +
将它们连接起来
start = """
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns="http://tempuri.org/">
<UserName>""" + os.environ["username"] + """</UserName>
<Password>""" + os.environ["password"] + """</Password>
<oShipData>"""
你可以使用 f-strings:
import os
start = f"""<?xml version="1.0" encoding="utf-8" ?><soap:Envelope \
xmlns="http://tempuri.org/"> \
<UserName>{os.environ['username']}</UserName><Password>{os.environ['password']}</Password>
xmlns="http://tempuri.org/"><oShipData>"""
如果您打算使用 XML 对象,最好使用一些 类 来生成 XML 文档。在 python 中有内置的 xml.etree.ElementTree
.
代码:
import os
import xml.etree.ElementTree as ET
envelope = ET.Element("soap:Envelope", attrib={"xmlns": "http://tempuri.org/"})
username = ET.SubElement(envelope, "UserName")
username.text = os.environ["username"]
password = ET.SubElement(envelope, "Password")
password.text = os.environ["password"]
start = ET.tostring(envelope, encoding="utf-8", xml_declaration=True).decode()
结果:
<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns="http://tempuri.org/"><UserName>user</UserName><Password>pass</Password></soap:Envelope>
P.S。在 python 3.9+ 上,您可以使用 ET.indent(envelope)
获得漂亮的打印结果 (在 ET.tostring()
调用之前插入).
我有一个字符串
start = """<?xml version="1.0" encoding="utf-8" ?><soap:Envelope \
xmlns="http://tempuri.org/"> \
<UserName>username</UserName><Password>password</Password>\
xmlns="http://tempuri.org/"><oShipData>"""
我想为用户名和密码使用环境变量,而不是在代码中对它们进行硬编码,我尝试了这个
import os
start = """<?xml version="1.0" encoding="utf-8" ?><soap:Envelope \
xmlns="http://tempuri.org/"> \
<UserName>"""os.environ["username"]"""</UserName><Password>"""os.environ["password"]"""</Password>
xmlns="http://tempuri.org/"><oShipData>"""
但这给了我一个错误:
"errorMessage": "Syntax error in module 'test': invalid syntax (test.py, line 5)",
"errorType": "Runtime.UserCodeSyntaxError"
如何转义字符串并从字符串中的 os.environ
动态获取值?
您可以在 python 中添加字符串。所以 "teststring"
是一个普通的字符串,但是 "test"+variable+"string"
会得到一个字符串,中间有 variable 的值,假设 variable 是 string 类型。如果不是,请使用 "test"+str(variable)+"string"
.
import os
start = """<?xml version="1.0" encoding="utf-8" ?><soap:Envelope \
xmlns="http://tempuri.org/"> \
<UserName>"""+str(os.environ["username"])+"""</UserName><Password>"""+str(os.environ["password"])+"""</Password>
xmlns="http://tempuri.org/"><oShipData>"""
应该可以。
你不能只把字符串和代码放在一起,你可以用 +
start = """
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns="http://tempuri.org/">
<UserName>""" + os.environ["username"] + """</UserName>
<Password>""" + os.environ["password"] + """</Password>
<oShipData>"""
你可以使用 f-strings:
import os
start = f"""<?xml version="1.0" encoding="utf-8" ?><soap:Envelope \
xmlns="http://tempuri.org/"> \
<UserName>{os.environ['username']}</UserName><Password>{os.environ['password']}</Password>
xmlns="http://tempuri.org/"><oShipData>"""
如果您打算使用 XML 对象,最好使用一些 类 来生成 XML 文档。在 python 中有内置的 xml.etree.ElementTree
.
代码:
import os
import xml.etree.ElementTree as ET
envelope = ET.Element("soap:Envelope", attrib={"xmlns": "http://tempuri.org/"})
username = ET.SubElement(envelope, "UserName")
username.text = os.environ["username"]
password = ET.SubElement(envelope, "Password")
password.text = os.environ["password"]
start = ET.tostring(envelope, encoding="utf-8", xml_declaration=True).decode()
结果:
<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns="http://tempuri.org/"><UserName>user</UserName><Password>pass</Password></soap:Envelope>
P.S。在 python 3.9+ 上,您可以使用 ET.indent(envelope)
获得漂亮的打印结果 (在 ET.tostring()
调用之前插入).