gpt4 book ai didi

python - 如何从launch.json传递带有特殊字符的参数?

转载 作者:行者123 更新时间:2023-12-04 15:59:51 39 4
gpt4 key购买 nike

我正在尝试通过 launch.json 将参数传递给我的 Python 程序,我的参数之一需要特殊字符,因为它是密码(我计划添加更安全的方法来输入密码,但这不是重点)。

这是我的launch.json(密码已更改但仍带有特殊字符)

{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"args": [
"-u",
"camera@iot-project.com",
"-p",
"Y^bKKiUPu!fM6!dBsvnALmuXbP6fqT$d"
],
"console": "integratedTerminal"
}
]
}

当我将密码参数设置为 "'Y^bKKiUPu!fM6!dBsvnALmuXbP6fqT$d'" 时,它实际上将单引号传递到 Python 程序中,这不是我想要的(在带有单引号的终端中运行程序有效)。

这是我的 Python 程序:

import sys
import getopt
import pyrebase

# Get full command-line arguments
argument_list = sys.argv

# Keep all but the first
argument_list = argument_list[1:]
# Parse arguments
try:
options, arguments = getopt.getopt(argument_list, "u:p:", ["username", "password"])
except getopt.GetoptError as error:
print(error)
exit(1)

# Get username and password from arguments
for option, argument in options:
if option in ["-u", "--username"]:
username = argument
if option in ["-p", "--password"]:
password = argument

config = {
"apiKey": "*apikeyhere*",
"authDomain": "*domain*.firebaseapp.com",
"databaseURL": None,
"storageBucket": "*domain*.appspot.com",
}

firebase = pyrebase.initialize_app(config)

print(username)
print(password)

firebaseAuth = firebase.auth()
user = firebaseAuth.sign_in_with_email_and_password(username, password)

最佳答案

对于 Python 扩展和 console 配置,而不是 "integratedTerminal" ,您可以使用 "internalConsole" .

{
"name": "run-py-with-special-chars-internalconsole",
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/Q",
"program": "${workspaceFolder}/Q/test.py",
"args": [
"-u",
"camera@iot-project.com",
"-p",
"Y^bKKiUPu!fM6!dBsvnALmuXbP6fqT$d"
],
"console": "internalConsole" // <--------------------
}

这是您的代码的精简版本和 print -ed 输出到 调试控制台 标签:

vs code debug console

保存密码的地方,与手动运行脚本相同:

$ python test.py -u 'camera@iot-project.com' -p 'Y^bKKiUPu!fM6!dBsvnALmuXbP6fqT$d'
internalConsole选项使用 VS Code 的调试器控制台。在写这个答案时,我试图为它找到一个很好的引用,但我发现的只是: Debug Console ,它说“可以在调试控制台 REPL 中评估表达式”。

这似乎意味着与 integratedTerminal 相比,特殊字符不会被评估为特殊命令。 ,它基本上使用您操作系统的底层外壳。在 Linux 和 Mac 上,这可能意味着 bash , 和 ! means a different thing on the terminal .

您可以看到 integratedTerminal 的问题查看终端输出时的选项
bash-3.2$  env DEBUGPY_LAUNCHER_PORT=56036 /path/to/bin/python 
/path/to/.vscode/extensions/ms-python.python-2020.3.69010/pythonFiles/lib/python/debugpy/no_wheels/debugpy/launcher
/path/to/test.py -u camera@iot-project.com -p Y^bKKiUPu!fM6!dBsvnALmuXbP6fqT$d
bash: !fM6!dBsvnALmuXbP6fqT$d: event not found

并将带有特殊字符的密码作为未加引号传递。

关于python - 如何从launch.json传递带有特殊字符的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60908278/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com