我像这样运行 Connexion/Flask 应用程序:
import connexion
from flask_cors import CORS
from flask import g
app = connexion.App(__name__, specification_dir='swagger_server/swagger/')
app.add_api('swagger.yaml')
CORS(app.app)
with app.app.app_context():
g.foo = 'bar'
q = g.get('foo') # THIS WORKS
print('variable', q)
app.run(port=8088, use_reloader=False)
Run Code Online (Sandbox Code Playgroud)
代码中的其他地方:
from flask import abort, g, current_app
def batch(machine=None): # noqa: E501
try:
app = current_app._get_current_object()
with app.app_context:
bq = g.get('foo', None) # DOES NOT WORK HERE
print('variable:', bq)
res = MYHandler(bq).batch(machine)
except:
abort(404)
return res
Run Code Online (Sandbox Code Playgroud)
这不起作用 - 我无法将变量('bla')传递给第二个代码示例。
知道如何正确传递上下文变量吗?或者如何传递一个变量并在所有 Flask 处理程序中全局使用它?
我已经尝试过这个解决方案(有效):在第一个代码部分我会添加:
app.app.config['foo'] = 'bar' …Run Code Online (Sandbox Code Playgroud) 我正在使用kafka-python访问 Kafka。我尝试创建一个 Kafka Producer:
kafka_producer = KafkaProducer(bootstrap_servers=['kafka:9092'])
Run Code Online (Sandbox Code Playgroud)
但这会因kafka.errors.NoBrokersAvailable: NoBrokersAvailable异常而失败。
我发现我需要向api_versionKafkaProducer添加参数:
kafka_producer = KafkaProducer(bootstrap_servers=['kafka:9092'],
api_version=(0, 10, 1))
Run Code Online (Sandbox Code Playgroud)
此命令有效。
问题是:如何确定 的值api_version?
kafka-broker-api-versions.sh --bootstrap-server localhost:9092给了我一些东西,但我不确定是否有我可以使用的号码。我尝试了随机值api_version=(20, 2, 1),它也有效。
我想mc viewer(由F3键运行)突出显示我的C++代码.可能吗?对于编辑(F4键)我使用vim自己的语法高亮.对于查看我找不到这样的选择.有
editor_syntax_highlighting=1
Run Code Online (Sandbox Code Playgroud)
可以在〜/ .mc/ini或〜/ .config/mc/ini中更改,但它显然与内置的mcedit有关,而不是与查看器有关.有没有像viewer_syntax_highlighting = 1或任何其他方式如何突出显示查看器中的语法?
我对当前的 C++ 标准感兴趣,并且对http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/上的链接有点困惑。新版本应该是什么?我应该寻找什么标题?是“工作草案,编程语言 C++ 标准”还是“编程语言 \xe2\x80\x94 C++ ”?这些论文有什么区别?为什么N4141纸张有密码保护,而较新的N4296则没有?
\n\n问题在哪里可以找到当前的 C 或 C++ 标准文档?有一个很好的草稿列表,但我仍然无法分辨草稿的“稳定”版本是什么,即我可以使用什么作为 C++11 的参考?
\n我安装了几个终端。但只有其中一些可以正确显示所有 Unicode 字符。例如,经典的表情符号在不同的终端上显示不同:
\n\n\n\n\n\n\n\n正如您所看到的,术语(以及 gnome-terminal 或 st,此处不存在)可以正确显示表情符号。urxvt、xterm 无法显示矩形而不是正确的字符。
\n\n为什么会这样呢?所有终端的区域设置都相同。字体显然安装正确。xterm 和 rxvt-unicode 应该支持 Unicode(至少像 \xc4\x9b\xc5\xa1\xc4\x8d\xc5\x99 这样的捷克字符显示没有问题),但它们显然不支持 100%。
\n我试图了解 std::function 是如何工作的,但我无法编译它,也不明白为什么。我认为这与在类中使用 std::function 有关系,因为没有类(在全局范围内定义的映射)它可以工作。
这是我收到的错误消息:
functor.cc:37:9:错误:无法转换
‘{{"A", ((C*)this)->C::f}, {"B", ((C*)this)->C::g}, {"C", ((C*)this)->C::h}}’从‘<brace-enclosed initializer list>’到‘std::map<std::__cxx11::basic_string<char>, std::function<bool(const std::vector<std::__cxx11::basic_string<char> >&)> >’
示例代码(它没有意义,但它很好地代表了我遇到的问题):
#include <iostream>
#include <map>
#include <functional>
#include <vector>
class C {
public:
bool f(const std::vector<std::string>& s) {
std::cout << "F" << std::endl;
for (auto& i : s) {
std::cout << i << std::endl;
}
return true;
}
bool g(const std::vector<std::string>& s) {
std::cout << "G" << std::endl;
for (auto& i : s) {
std::cout << i …Run Code Online (Sandbox Code Playgroud) 在模板类中执行==和!=运算符的正确方法是什么?假设这段代码:
template<typename T>
class C {
T x, y;
public:
C(T a, T b) : x(a), y(b) {}
bool cmp() {
return x == y;
}
};
int main()
{
// OK
C<int> i(1,2);
i.cmp();
// not OK
C<double> d(1.0, 2.0);
d.cmp();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果你用g ++ -Wfloat-equal构建它,你就会得到
警告:将浮点数与==或!=进行比较是不安全的[-Wfloat-equal]
因为你不能简单地比较浮点变量.
我已经使用type_traits和enable_if解决了这个问题(感谢@Andrew和@OMGtechy):
#include <type_traits>
#include <limits>
#include <cmath>
#include <iostream>
using namespace std;
template <typename IntegralType>
typename std::enable_if<std::is_integral<IntegralType>::value, bool>::type
equal(const IntegralType& a, const IntegralType& b) {
return a == b; …Run Code Online (Sandbox Code Playgroud) 我知道这是一个坏习惯,但我想知道一些解决方法或破解这个问题.我有一个这样的课:
template <class T>
class A : std::vector<T> {
T& operator()(int index) { // returns a _reference_ to an object
return this->operator[](index);
}
};
Run Code Online (Sandbox Code Playgroud)
可以做这样的事情:
A<int> a{1,2,3,4};
a(3) = 10;
Run Code Online (Sandbox Code Playgroud)
但是如果有人使用bool作为模板参数,它就会停止工作
A<bool> a{true, false, true};
std::cout << a(0) << std::endl; // not possible
if (a(1)) { /* something */ } // not possible
Run Code Online (Sandbox Code Playgroud)
std::vector<bool>是矢量的专用版本(http://www.cplusplus.com/reference/vector/vector-bool/),它不允许这样的事情.
有没有办法从std :: Vector获取布尔变量的引用?或者任何不同的解决方
假设我有这个类(继承自std :: Vector,它只是一个例子)
#include <vector>
using namespace std;
template <class T>
class C : public vector<T> {
// I don't want to use static keyword
void transformation(T i) {
i *= 100;
}
public:
void method() {
for_each(this->begin(), this->end(), transformation);
}
};
int main() {
C<double> c;
for (int i=-3; i<4; ++i) {
c.push_back(i);
}
c.method();
}
Run Code Online (Sandbox Code Playgroud)
如何在类本身内部使用类方法调用for_each?我知道我可以使用static关键字,但是有什么其他方法可以在不使用静态的情况下使用函数对象?
我在编译时收到此错误消息:
for_each.cc:21:55:错误:无法将'C :: transformation'从类型'void(C ::)(double)'转换为'void(C ::*)(double)'for_each(this-> begin(),this-> end(),transformation);
我想我需要添加.*或在->*某处,但我找不到在哪里以及为什么.
我想在指定分区的一行中获得一列的第一个值和第二列的最后一个值.为此我创建了这个查询:
SELECT DISTINCT
b.machine_id,
batch,
timestamp_sta,
timestamp_stp,
FIRST_VALUE(timestamp_sta) OVER w AS batch_start,
LAST_VALUE(timestamp_stp) OVER w AS batch_end
FROM db_data.sta_stp AS a
JOIN db_data.ll_lu AS b
ON a.ll_lu_id=b.id
WINDOW w AS (PARTITION BY batch, machine_id ORDER BY timestamp_sta)
ORDER BY timestamp_sta, batch, machine_id;
Run Code Online (Sandbox Code Playgroud)
但正如您在图像中看到的那样,batch_end列中返回的数据不正确.
batch_start列具有正确的timestamp_sta列的第一个值.但是batch_end应为"2012-09-17 10:49:45",它等于同一行的timestamp_stp.
为什么会这样?
我在这个目录中:
/home/michal/project/test/my-utils/rel/0.1.0
Run Code Online (Sandbox Code Playgroud)
我想获得Linux shell中/ home/michal/project /的相对路径:
../../..
Run Code Online (Sandbox Code Playgroud)
我用sed尝试了一些东西,但是我没有成功创建正则表达式.例如其中一次尝试:
pwd | sed -e "s/.*project\///g" | sed -e "s/[^\/]+/../g"
Run Code Online (Sandbox Code Playgroud)
任何提示怎么做?
我想将mytopic具有 1 个分区且给定组 IDtestgroup1为 0 的主题的偏移量设置为 0。但这并不总是可行。如果我想将偏移量设置为 0,我会收到以下消息:
bash-4.4# kafka-consumer-groups.sh --bootstrap-server localhost:9092 --topic mytopic --group testgroup1 --reset-offsets --to-offset 0 --execute
[2021-06-04 09:23:30,854] WARN New offset (0) is lower than earliest offset for topic partition mytopic-0. Value will be set to 1365671 (kafka.admin.ConsumerGroupCommand$)
bash-4.4# kafka-topics.sh --bootstrap-server localhost:9092 --topic mytopic --describe
Topic: mytopic PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: mytopic Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001
bash-4.4# kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-name mytopic --entity-type topics …Run Code Online (Sandbox Code Playgroud) 我想调用setValue()需要 String 参数的方法- 它检查是否可以转换为整数并将其增加 1,转换回 String 或使用原始值:
String origStr = "123";
MyClass.setValue(() -> {
String val = origStr;
try
{
val = String.valueOf(Integer.parseInt(origStr) + 1);
} catch(NumberFormatException e) {}
return val;
});
Run Code Online (Sandbox Code Playgroud)
但是这是不可能的,我从编译器得到“ lambda 转换的目标类型必须是一个接口”。
知道如何创建这个字符串吗?
编辑:我为什么要这样做?实际上我使用构建器模式,我想在没有临时值的情况下设置它:
MYClass x = new MyClass.Builder
.setValue() // here's my code
.setSomethingElse()
.setOneMoreTime()
.build();
Run Code Online (Sandbox Code Playgroud) c++ ×5
c++11 ×3
apache-kafka ×2
bash ×1
boolean ×1
comparison ×1
connexion ×1
emoji ×1
flask ×1
foreach ×1
java ×1
kafka-python ×1
lambda ×1
mc ×1
offset ×1
postgresql ×1
pwd ×1
python ×1
regex ×1
retention ×1
sed ×1
standards ×1
std-function ×1
stdvector ×1
templates ×1
terminal ×1
unicode ×1