我有一个函数,它需要很多参数,因为我不想记住它们的位置,所以我决定使用命名参数
def f(a=None, b=None, c=None):
print a,b,c
f('test', c=5, b='second param')
>>> test second param 5
Run Code Online (Sandbox Code Playgroud)
现在,通常我一次只更改一个参数,所以我想通过只键入f(c = 3.14)来调用函数,其中预期结果为f(a = a,b = b,c = 3.14),即每个应该从本地范围读取未明确传递的参数.
但是当然它不起作用,因为使用命名参数我必须设置一个默认值,如果我使用**kwargs,它只是忽略参数
def f(**kwargs):
print a,b,c
a=1; b=2; c=3
f(a=2, b=4, c=8)
>>> 1 2 3 # instead of 2 4 8
Run Code Online (Sandbox Code Playgroud)
我曾经为每个参数定义一个新函数,但我不喜欢这种方法,尽管到目前为止它是最有效的
def fc(c_new):
return f(a, b, c_new)
Run Code Online (Sandbox Code Playgroud)
如何使函数使用当前作用域中的变量作为其命名参数的默认值?
我在VM内部的docker容器内运行ELK堆栈.
我可以把curl
东西给ES,它在Kibana出现就好了.
我可以使用Logstash读取文件并将它们输出到stdout.
但Logstash无法将数据发送到ES
docker-compose.yml
version: '2'
services:
elasticsearch:
image: elasticsearch
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
xpack.security.enabled: "false"
xpack.monitoring.enabled: "false"
xpack.graph.enabled: "false"
xpack.watcher.enabled: "false"
networks:
- elk
logstash:
image: docker.elastic.co/logstash/logstash:5.3.2
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./logstash/pipeline:/usr/share/logstash/pipeline
- ./data:/usr/share/data
ports:
- "5000:5000"
- "9600:9600"
networks:
- elk
depends_on:
- elasticsearch
kibana:
# kibana config
networks:
elk:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
logstash.yml
(启用或禁用xpack似乎没有区别)
#log.level: debug
xpack.monitoring.elasticsearch.password: changeme
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.url: http://127.0.0.1:9200
xpack.monitoring.enabled: false
Run Code Online (Sandbox Code Playgroud)
pipeline.conf
input {
# some files …
Run Code Online (Sandbox Code Playgroud)