我有一个看起来像这样的dockerfile:
FROM python:2.7
RUN pip install awscli --upgrade --user
Run Code Online (Sandbox Code Playgroud)
从此dockerfile构建docker映像后,即可运行它。但是当我进入容器并尝试运行AWS CLI时,找不到它,因为它不在PATH环境变量中:
$ docker exec -ti ec4934370e37 /bin/bash
root@ec4934370e37:~# aws
bash: aws: command not found
root@ec4934370e37:/# find / -name aws
/root/.local/bin/aws
root@ec4934370e37:/# /root/.local/bin/aws --version
aws-cli/1.15.81 Python/2.7.15 Linux/4.9.87-linuxkit-aufs botocore/1.10.80
root@ec4934370e37:/# env | grep PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Run Code Online (Sandbox Code Playgroud)
通过包含在PATH变量中来确保AWSCLI可用的最佳/最简便/最省力的方法是什么?可以从dockerfile本身内部完成吗?
我正在尝试编写一个连接到数据库的 python 脚本,但是只有当您首先通过 SSH 连接到堡垒主机时才能访问该数据库。从命令行,这是我必须做的来设置隧道:
$ ssh -i /path/to/my/key/file.pem -A -L 3307:mydb1.fsd23rqr.us-east-1.rds.amazonaws.com:3306 my_ssh_username1@my-bastion-host.without.2fa
[ec2-user@ip-X-X-X-X ~]$
Run Code Online (Sandbox Code Playgroud)
我已经使用这个sshtunnel 库创建了一个 python 脚本来做同样的事情。有用:
#!/usr/bin/env python
from sshtunnel import SSHTunnelForwarder
import MySQLdb as db
import pandas as pd
print('\nAbout to try connecting')
with SSHTunnelForwarder(
('my-ssh-host.without.2fa', 22),
ssh_username='my_ssh_username1',
ssh_pkey='/path/to/my/key/file.pem',
remote_bind_address=('mydb1.fsd23rqr.us-east-1.rds.amazonaws.com', 3306),
local_bind_address=('0.0.0.0', 3307)
) as tunnel:
print "Connection Established"
print pd.read_sql_query(
"select 'Hello' from dual",
db.connect(
host='127.0.0.1',
port=tunnel.local_bind_port,
user='my_db_username1',
passwd='****************',
db='my_db_instance_1'
)
)
Run Code Online (Sandbox Code Playgroud)
产生:
About to try connecting
Connection Established
Hello
0 Hello
Run Code Online (Sandbox Code Playgroud)
但现在我需要使用不同的数据库和堡垒组合。这个堡垒有 …
我有以下字符串,我想使用 Python 对其进行 Base64 解码。
eyJqa3UiOiJodHRwczovL2U5N2I4YTlkNjcyZTRjZTQ4NDVlYzY5NDdjZDY2ZWY2LXNiLmJhYXMubmludGVuZG8uY29tLzEuMC4wL2NlcnRpZmljYXRlcyIsImtpZCI6ImZlOWRiYmZmLTQ3MGItNDZjOC04YmFmLTFiNzY5OGRlZTViZSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJodHRwczovL2U5N2I4YTlkNjcyZTRjZTQ4NDVlYzY5NDdjZDY2ZWY2LXNiLmJhYXMubmludGVuZG8uY29tIiwiZXhwIjoxNTQ1MTg1NDk2LCJ0eXAiOiJpZF90b2tlbiIsImF1ZCI6IjhkOTc1NTllNjNlY2NkNTYiLCJiczpkaWQiOiI2NjJhZTQwOWYwNTQyYTBjIiwic3ViIjoiOTNkYmYwNDdiYTI3NzQ5NSIsImp0aSI6IjY1NDg4ZjJmLTI1NzAtNDBkYy04ODQ3LTMzODNlZWIxMGJiYiIsIm5pbnRlbmRvIjp7ImFpIjoiMDEwMGY4MDAwMDQ5MjAwMCIsImF2IjoiMDAwMCIsImVkaSI6ImJjNTdiYmM3MTZlMDA1MGFmOWRhN2NkYTIzMWRjZDgyIiwiYXQiOjE1NDUxNzQ2OTZ9LCJpYXQiOjE1NDUxNzQ2OTZ9。ZMUIt3wYrbfhXnnDh4WraGlKrZy0YuL5prluY70sU_-0W5XvWIB-xmTrLz7LJWHEGwTskcWf81_HBq_mSb75rMfTAEBwBmOJ4ITmhdnXksz8w7EDOWuPPSEft5XLMNOMD16ztEOYe5ddU_iqNEbT56L7fcAJEXv0FWy6H_OutxOglYpDaNkcj6CWJ7dpA0JbqerR9dEszaLwyn1ZBDPVD0YeAIm5bEr61imeedzMb0amxlTl4R87mqK6epsFUnRy6p6Klr27_DlTLQ-gej09W7NeNzONCj4thHgCr9szAiaN28krfTc2fobz3qFCoC_eQghiIIZBe_-Lksng3Eg6tw
当我转到这个https://www.base64decode.org/并将其放入时,我可以看到解码字符串的第一部分是可读的纯文本:
但是,当我尝试使用 Python 对其进行解码时,它失败了:
>>> import base64
>>> x = "eyJ......"
>>> base64.b64decode(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/base64.py", line 76, in b64decode
raise TypeError(msg)
TypeError: Incorrect padding
Run Code Online (Sandbox Code Playgroud)
我尝试了这种补救措施。但它并没有改变由此产生的错误。我该如何解决这个问题?为什么它不像那个网站那样解码?
我收到了 JWT 令牌。\n我有兴趣解压它并验证它的内容。
\n\n我想使用pyJWT库来做到这一点。请看下面的小程序。
\n\n我已成功对 JWT 进行 Base64 解码。我已经从网上检索到匹配的JWK。但我不知道接下来要做什么来验证签名。
\n\n当我尝试执行jwt.decode()以下操作时,出现错误jwt.exceptions.DecodeError: Not enough segments。
# !/usr/bin/env python\n\nimport jwt\nimport base64\nimport json\nimport requests\n\nmy_jwt = "eyJqa3UiOiJodHRwczovL2U5N2I4YTlkNjcyZTRjZTQ4NDVlYzY5NDdjZDY2ZW" \\\n "Y2LXNiLmJhYXMubmludGVuZG8uY29tLzEuMC4wL2NlcnRpZmljYXRlcyIsImtp" \\\n "ZCI6ImZlOWRiYmZmLTQ3MGItNDZjOC04YmFmLTFiNzY5OGRlZTViZSIsImFsZy" \\\n "I6IlJTMjU2In0.eyJpc3MiOiJodHRwczovL2U5N2I4YTlkNjcyZTRjZTQ4NDVl" \\\n "YzY5NDdjZDY2ZWY2LXNiLmJhYXMubmludGVuZG8uY29tIiwiZXhwIjoxNTQ1MT" \\\n "g1NDk2LCJ0eXAiOiJpZF90b2tlbiIsImF1ZCI6IjhkOTc1NTllNjNlY2NkNTYi" \\\n "LCJiczpkaWQiOiI2NjJhZTQwOWYwNTQyYTBjIiwic3ViIjoiOTNkYmYwNDdiYT" \\\n "I3NzQ5NSIsImp0aSI6IjY1NDg4ZjJmLTI1NzAtNDBkYy04ODQ3LTMzODNlZWIx" \\\n "MGJiYiIsIm5pbnRlbmRvIjp7ImFpIjoiMDEwMGY4MDAwMDQ5MjAwMCIsImF2Ij" \\\n "oiMDAwMCIsImVkaSI6ImJjNTdiYmM3MTZlMDA1MGFmOWRhN2NkYTIzMWRjZDgy" \\\n "IiwiYXQiOjE1NDUxNzQ2OTZ9LCJpYXQiOjE1NDUxNzQ2OTZ9.ZMUIt3wYrbfhX" \\\n "nnDh4WraGlKrZy0YuL5prluY70sU_-0W5XvWIB-xmTrLz7LJWHEGwTskcWf81_" \\\n "HBq_mSb75rMfTAEBwBmOJ4ITmhdnXksz8w7EDOWuPPSEft5XLMNOMD16ztEOYe" \\\n "5ddU_iqNEbT56L7fcAJEXv0FWy6H_OutxOglYpDaNkcj6CWJ7dpA0JbqerR9dE" \\\n "szaLwyn1ZBDPVD0YeAIm5bEr61imeedzMb0amxlTl4R87mqK6epsFUnRy6p6Kl" \\\n "r27_DlTLQ-gej09W7NeNzONCj4thHgCr9szAiaN28krfTc2fobz3qFCoC_eQgh" \\\n "iIIZBe_-Lksng3Eg6tw"\n\ndecoded_token = [\n base64.b64decode(i + \'=\' * (-len(i) % 4))\n for i in my_jwt.split(\'.\')\n]\nheader = json.loads(decoded_token[0])\nclaims = …Run Code Online (Sandbox Code Playgroud) 假设我有一个表示 RSA 密钥对的 python 结构,如下所示:
rsa_key_pair = {
'private_key': '-----BEGIN PRIVATE KEY-----\nMIIEvAIBADAN__OBSCURED__qxu3sWAlY/bstTB5WfX8PA==\n-----END PRIVATE KEY-----\n',
'public_key': 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCDDqGTiBYyoB9T5Haow5gcPBIIiltLVyM4vo8Txia1czgrk2XGH5t4dsWrcXIXjQafNb7PKelXZdRU36vIIAaZCZ0As5LtkC5D93+KO9PFLGkHxWi2G43naR9hOnrKliMjOd+JRUdApdY8c/wYJbDxGGuw7W9e3MsLABFEK+TnPTVJtO8Ix78FiuHRooWfU5ph7clfTeyundN2BNv8mO6ZSBiBAk6tN8Fwpljs96Z/3HnMQutX1/AFkMn5h+E0EV4CgLPvtRazfzoWNlIiXGmiVUVHrM1wna9jT/jyb7aoxkthkAXb6NNyCW/Znxq45Ozy27kZcw/X4WQ0QMmpgfX'
}
Run Code Online (Sandbox Code Playgroud)
如何编写将生成 JWK 的 Python 代码,该 JWK 可用于验证使用此 RSA 私钥签名的 JWT?使用的算法是 RSA256。
这个网站mkjwk完成了我正在尝试做的事情。但我正在尝试用 python 代码来做。
我有一本字典,我想将其编码为查询参数。我正在访问的服务器期望查询如下所示:http://www.example.com?A=B,C
但是当我尝试使用urllib.urlencode构建 URL 时,我发现逗号变成了%2C:
>>> import urllib
>>> urllib.urlencode({"A":"B,C"})
'A=B%2CC'
Run Code Online (Sandbox Code Playgroud)
有什么方法可以转义逗号,以便urlencode将其视为普通字符吗?
如果没有,我该如何解决这个问题?
这是我的 Dockerfile:
\n\nFROM python:2.7\nRUN apt-get update && apt-get -y upgrade\n#RUN apt-get install -y python-pip python-dev libmysqlclient-dev\nRUN pip install --upgrade pip\nRUN pip install MySQL-python==1.2.5\nRun Code Online (Sandbox Code Playgroud)\n\n当我构建它时,我收到以下错误:
\n\nStep 4/4 : RUN pip install MySQL-python==1.2.5\n ---> Running in 60be606a8d3e\nDEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won\'t be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 …Run Code Online (Sandbox Code Playgroud) 我正在使用 GRPC/proto-buffers 在 GoLang 中编写我的第一个 API 端点。我对 Go 还很陌生。以下是我为测试用例编写的文件
package my_package
import (
"context"
"testing"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/structpb"
"github.com/MyTeam/myproject/cmd/eventstream/setup"
v1handler "github.com/MyTeam/myproject/internal/handlers/myproject/v1"
v1interface "github.com/MyTeam/myproject/proto/.gen/go/myteam/myproject/v1"
)
func TestEndpoint(t *testing.T) {
conf := &setup.Config{}
// Initialize our API handlers
myhandler := v1handler.New(&v1handler.Config{})
t.Run("Success", func(t *testing.T) {
res, err := myhandler.Endpoint(context.Background(), &v1interface.EndpointRequest{
A: "S",
B: &structpb.Struct{
Fields: map[string]*structpb.Value{
"T": &structpb.Value{
Kind: &structpb.Value_StringValue{
StringValue: "U",
},
},
"V": &structpb.Value{
Kind: &structpb.Value_StringValue{
StringValue: "W",
},
},
},
},
C: ×tamppb.Timestamp{Seconds: 1590179525, Nanos: 0},
})
require.Nil(t, err)
// …Run Code Online (Sandbox Code Playgroud) UUID Go Postgres 库定义了这样的类型:
type UUID struct {\n UUID uuid.UUID\n Status pgtype.Status\n}\n\nfunc (dst *UUID) Set(src interface{}) error {\n<Remainder Omitted>\n\n\n \nRun Code Online (Sandbox Code Playgroud)\n我的代码使用这个库:
\nimport pgtype/uuid\n\nstring_uuid := uuid.New().String()\nfmt.Println("string_uuid = ", string_uuid)\nmyUUID := pgtype.UUID{}\nerr = myUUID.Set(string_uuid)\nif err != nil {\n panic()\n}\nfmt.Println("myUUID.Bytes = ", myUUID.Bytes)\nfmt.Println("string(myUUID.Bytes[:]) = ", string(myUUID.Bytes[:]))\nRun Code Online (Sandbox Code Playgroud)\n这是输出:
\nstring_uuid = abadf98f-4206-4fb0-ab91-e77f4380e4e0\nmyUUID.Bytes = [171 173 249 143 66 6 79 176 171 145 231 127 67 128 228 224]\nstring(myUUID.Bytes[:]) = \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdBO\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdC\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\nRun Code Online (Sandbox Code Playgroud)\nabadf98f-4206-4fb0-ab91-e77f4380e4e0一旦将其放入myUUIDwhich is 类型中,如何才能恢复到原始的人类可读的 UUID …
这个问题与以前在此处提出并回答的问题高度相关:如何在视图中包装FormWizard?
有人可以发布他们如何成功地将Django表单向导包装到视图中的确切细节,以便可以使用login_required装饰器吗?在互联网上有很多关于这个主题的讨论,但它们似乎都不完整,因为它们实际上并没有显示它们如何定义它们的表格向导类.
当我将浏览器指向视图时,我得到以下异常:
__init__() takes exactly 1 non-keyword argument (2 given) in views.py line #108
Run Code Online (Sandbox Code Playgroud)
当我实例化Form Wizard对象时它会传递什么参数,以至于它不会给我这个错误?如果您有一些有效的示例代码,请发布.
这是我的urls.py文件中的最新信息:
url(r'^createObject/$', views.createObjectView, name='createObject'),
Run Code Online (Sandbox Code Playgroud)
这是我的views.py文件中的最新内容:
CREATE_OBJECT_FORMS = [
("createMyForm0", createObjectForm0),
("createMyForm1", createObjectForm1),
("createMyForm2", createObjectForm2),
("createMyForm3", createObjectForm3),
]
CREATE_OBJECT_TEMPLATES = {
"createMyForm0": "myApp/form0.html",
"createMyForm1": "myApp/form1.html",
"createMyForm2": "myApp/form2.html",
"createMyForm3": "myApp/form3.html",
}
@login_required
def createObjectView(request):
# Set up the dictionary of initial data for the form
# In this case, we are pre-filling some data from the first form only
initial = {0: {}}
# …Run Code Online (Sandbox Code Playgroud) python ×5
docker ×2
go ×2
jwt ×2
aws-cli ×1
base64 ×1
byte ×1
decode ×1
django ×1
django-forms ×1
django-views ×1
grpcurl ×1
jwk ×1
multi-factor-authentication ×1
mysql-python ×1
pip ×1
pyjwt ×1
rsa ×1
ssh-tunnel ×1
urlencode ×1
urllib ×1