我正在用Flask写一个简单的REST服务。当我的代码中发生异常时,我会在浏览器中收到一条不错的错误消息和一个交互式调试器。但是,如果我从命令行(例如,使用curl)或在单元测试中调用该服务,但出现故障,我仍然会收到格式化(HTML)错误消息。我记得有时我会收到一条纯文本消息(基本上只是Python错误+追溯),而且我不知道Flask如何决定提供纯文本或HTML。
在没有浏览器的情况下,如何使Flask返回简单(非交互式,非HTML)错误消息?
如何在GObject/Gtk中获取某个类的类对象?例如,如果我的类是GtkSpinButton,我想获得代表该类的GtkSpinButtonClass实例.它是参数"class"
gtk_spin_button_class_init (GtkSpinButtonClass *class)
Run Code Online (Sandbox Code Playgroud)
它是存储虚函数的对象.当我有一个GtkSpinButton的实例时,我可以打电话
GtkSpinButtonClass *class = GTK_SPIN_BUTTON_GET_CLASS (instance)
Run Code Online (Sandbox Code Playgroud)
但是我没有实例.GTK_TYPE_SPIN_BUTTON
给我类型id,数字,而不是类对象.知道如何获得实际的实例吗?
创建后如何更改 win32 窗口的窗口类?我出于好奇而问这个问题,因为我发现 Stardock 的 Spy++ 中的一款精美的桌面定制工具确实可以做到这一点。
免责声明(遗憾的是现在是必要的):我搜索了文档但找不到任何东西。我知道这可能不是本意要做的,可能会导致很多奇怪的副作用,并且不应该在生产应用程序中完成。不过,我还是想知道他们是如何做到这一点的。
编辑:背景故事,可能很有趣。
我正在尝试 Stardock 的 ModernMix,它允许您在桌面上以窗口模式使用 Metro / Modern / Windows Store 应用程序,我想弄清楚它们是如何做到的。我很快发现现代应用程序只能在常规的全屏 Win32 窗口中运行!您实际上可以更改窗口样式以取消最大化它并给它一个标题栏等。但是,至少有一件事不起作用:您不能在窗口上使用航空捕捉,以及屏幕顶部的热边缘仍然将窗口视为现代应用程序。ModernMix 中不存在这个问题,所以我正在寻找差异。
我不断地在我的应用程序中显示各种调试信息,包括 HWND、窗口样式,并使用 Spy++ 检查了窗口。事实证明,当 ModernMix 取消最大化窗口时,它的类从 Windows.UI.Core.CoreWindow“更改”为 Windows.UI.Core.CoreFramedWindow。然而,我的窗口中显示的 HWND 没有改变!所以我错误地得出结论,ModernMix 通过更改类来摆脱窗口的特殊行为...但事实证明,ModernMix 只是创建了另一个顶层,并以某种方式将原始窗口的内容重定向到新的顶层(至少看起来是这样)喜欢)。
(我仍然把问题留在这里,即使只是作为无法完成的参考。)
Windows 8中的新Metro风格/ WinRT应用程序对您可以调用的API有一定的限制.此外,你必须使用异步技术,你的应用程序必须是可暂停的等等.我想知道如何,如果所有这些都被强制执行.
新的Metro应用程序是可执行的程序,还是其他东西(例如,更像COM控件,具有一组已定义的接口)?如何在编译时,运行时(通过沙盒等)或仅通过Windows应用商店策略(类似于iOS中的情况)强制执行API限制?如果我感到狡猾,我是否可以获得屏幕处理和操作界面,在顶部添加浮动窗口,在后台启动某些内容,或以其他方式摆脱Metro的限制?
我问的一个原因是我正在考虑为Python创建一个WinRT库,以便可以使用它来编写Metro应用程序.但是,Python核心显然使用了很多非WinRT API调用,所以这可能从一开始就注定要失败.我还想了解Metro应用程序的解剖结构.
编辑:根据此线程,您可以使用C运行时的所有功能.看起来你可以编译调用禁用函数的东西,但"应用程序验证程序"抱怨.我想知道你是否可以运行这样一个混合应用程序,如果你不关心商店(也许以后通过编写forbidden函数的解决方法使其兼容)...
我有一个类型VertexContainer
是typedef的实例化模板:
// in a header, included into cpp
class Vertex {/*...*/};
typedef DataVector<Vertex> VertexContainer;
class SomeOtherClass;
Run Code Online (Sandbox Code Playgroud)
我想VertexContainer
在标题中使用,而不是拉入可能的定义.是否有可能为它创建一个"原型"(如类声明)?
// in header
class VertexContainer; // <-- this doesnt work
class SomeOtherClass;
SomeHandle<SomeOtherClass> handle1; // this works
SomeHandle<VertexContainer> handle2; // how to prototype VertexContainer?
Run Code Online (Sandbox Code Playgroud)
使用GCC我得到类似于的错误:
error: using typedef-name 'VertexContainer' after 'class'
class VertexContainer;
(...)
note: 'VertexContainer' has a previous declaration here
typedef DataVector< Vertex > VertexContainer;
^~~~~~~~~~~~~~~`
Run Code Online (Sandbox Code Playgroud) 我有一个带有两个无限循环的vi.左循环连续从设备读取数据并绘制它,右循环调用自定义DLL并使用输出来驱动另一个设备.DLL调用阻塞大约一秒钟,因此两个循环不同步*.现在我想使用第一个循环中的瞬时值作为第二个循环中DLL的输入.我试过连接它们 - LabVIEW在循环边界插入终端 - 但是第二个循环不运行.(如果重要,数据类型是"动态数据" - 电压测量).我该怎么做?
(*实际上,最初只有一个循环,图形只在DLL调用之间更新,这是不令人满意的.)
我遇到了一个非常奇怪的双打问题.我有一个浮点数(双)列表,按降序排序.后来在我的程序中,我发现它们不再完全排序了.例如:
0.65801139819
0.6545651031 <-- a
0.65456513001 <-- b
0.64422968678
Run Code Online (Sandbox Code Playgroud)
中间的两个数字被翻转.有人可能会认为这个问题存在于数字的表示中,而且它们只是打印错了.但是我使用我用来对它们进行排序的相同运算符将每个数字与前一个数字进行比较 - 没有转换为基数10或类似情况:
double last_pt = 0;
for (int i = 0; i < npoints; i++) {
if (last_pt && last_pt < track[i]->Pt()) {
cout << "ERROR: new value " << track[i]->Pt()
<< " is higher than previous value " << last_pt << endl;
}
last_pt = track[i]->Pt();
}
Run Code Online (Sandbox Code Playgroud)
在排序期间比较值
bool moreThan(const Track& a, const Track& b) {
return a.Pt() > b.Pt();
}
Run Code Online (Sandbox Code Playgroud)
我确保它们总是加倍,而不是转换成浮点数.Pt()
返回一个double.列表中没有NaN,排序后我不会触摸列表.
为什么这些,这些数字有什么问题,以及(如何)我可以对这些数字进行排序,以便它们保持排序状态?
有时,我有一个控制结构(if,for,...),并且根据条件我要么使用控制结构,要么只执行主体.作为一个简单的例子,我可以在C中执行以下操作,但它非常难看:
#ifdef APPLY_FILTER
if (filter()) {
#endif
// do something
#ifdef APPLY_FILTER
}
#endif
Run Code Online (Sandbox Code Playgroud)
如果我在运行时只知道apply_filter,它也不起作用.当然,在这种情况下,我只需将代码更改为:
if (apply_filter && filter())
Run Code Online (Sandbox Code Playgroud)
但这在任意控制结构的一般情况下不起作用.(我手边没有一个很好的例子,但最近我有一些代码可以从这样的功能中获益很多.)
是否有任何语言我可以应用条件来控制结构,即具有更高阶的条件?在伪代码中,上面的例子是:
<if apply_filter>
if (filter()) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者更复杂的例子,如果一个varable在函数中设置了包装代码并将其作为一个线程启动:
<if (run_on_thread)>
void thread() {
<endif>
for (int i = 0; i < 10; i++) {
printf("%d\n", i);
sleep(1);
}
<if (run_on_thread)>
}
start_thread(&thread);
<endif>
Run Code Online (Sandbox Code Playgroud)
(实际上,在这个例子中,我可以想象为meta条件赋一个名称甚至是有用的,以确保顶部和底部s同步.)
我可以想象这样的东西是LISP中的一个功能,对吧?
我想在变量中存储命令行,然后执行该命令行.问题是,命令行的参数中包含空格.如果我做
$ x='command "complex argument"'
$ $x
Run Code Online (Sandbox Code Playgroud)
它command
用"complex
和调用argument"
.我尝试使用"$x"
它认为它将保留参数拆分,但它只尝试使用文件名执行程序command "complex argument"
.我也试过引号('
vs "
)和使用的变体exec
,但它没有帮助.有任何想法吗?
编辑:eval "$x"
几乎可以工作,但如果分隔参数的空格是换行符而不是空格,则它将这些行视为单独的命令.Edit2:额外的"
引号太多了,并使eval将新行解释为空格,而不是命令分隔符.答案中的解决方案都有效.
出于测试目的,我定义:
$ function args() { while [[ "$1" != "" ]]; do echo arg: $1; shift; done }
Run Code Online (Sandbox Code Playgroud)
这按预期工作:
$ args "1 2" 3
arg: 1 2
arg: 3
$ x="arg 4 5 6"
$ $x
arg: 4
arg: 5
arg: 6
Run Code Online (Sandbox Code Playgroud)
这不是:
$ x="args …
Run Code Online (Sandbox Code Playgroud) 我试图.cmd
从交互式PowerShell会话中运行脚本.我可以调用脚本cmd.exe
,但是从PS我得到:
PS C:\path\to\my\script> .\some_script.cmd
Fehler beim Ausführen des Programms "some_script.cmd": Zugriff verweigertIn Zeile:1 Zeichen:1
+ .\some_script.cmd
+ ~~~~~~~~~~~~~~~~~.
In Zeile:1 Zeichen:1
+ .\some_script.cmd
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (:) [], ApplicationFailedException
+ FullyQualifiedErrorId : NativeCommandFailed
Run Code Online (Sandbox Code Playgroud)
(德语部分表示"执行程序时出错...:拒绝访问")
我在VS代码和常规PS提示中尝试了.我拥有相关文件的所有必要访问权限.我知道你必须启用PS脚本的执行,但它不应该像打开.docx文件一样运行.cmd脚本(通过调用默认动词)?我试图Invoke-Item
明确地这样做,但得到了同样的错误.我怎样才能运行这个脚本,最好只是.\some_script.cmd
没有任何扭曲或包装?