我有一个程序,在它运行期间有时需要调用python来执行某些任务.我需要一个调用python并捕获pythons stdout并将其放入某个文件的函数.这是函数的声明
pythonCallBackFunc(const char* pythonInput)
Run Code Online (Sandbox Code Playgroud)
我的问题是捕获给定命令(pythonInput)的所有python输出.我没有python API的经验,我不知道什么是正确的技术来做到这一点.我尝试过的第一件事是使用Py_run_SimpleString重定向python的sdtout和stderr,这是我编写的代码的一些例子.
#include "boost\python.hpp"
#include <iostream>
void pythonCallBackFunc(const char* inputStr){
PyRun_SimpleString(inputStr);
}
int main () {
...
//S0me outside functions does this
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("old_stdout = sys.stdout");
PyRun_SimpleString("fsock = open('python_out.log','a')");
PyRun_SimpleString("sys.stdout = fsock");
...
//my func
pythonCallBackFunc("print 'HAHAHAHAHA'");
pythonCallBackFunc("result = 5");
pythonCallBackFunc("print result");
pythonCallBackFunc("result = 'Hello '+'World!'");
pythonCallBackFunc("print result");
pythonCallBackFunc("'KUKU '+'KAKA'");
pythonCallBackFunc("5**3");
pythonCallBackFunc("prinhghult");
pythonCallBackFunc("execfile('stdout_close.py')");
...
//Again anothers function code
PyRun_SimpleString("sys.stdout = old_stdout");
PyRun_SimpleString("fsock.close()");
Py_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?此外,由于某种原因PyRun_SimpleString在得到一些数学表达式时什么都不做,例如PyRun_SimpleString("5**3")什么都不打印(python …
在Matlab中我可以启动外部.exe文件,有时会弹出一个需要按下回车键的文件.例如:
system('C:\Program Files (x86)\WinZip\WINZIP32.EXE')
Run Code Online (Sandbox Code Playgroud)
将启动Winzip,然后为了使用它,您需要通过按Enter键传递"立即购买"弹出窗口.现在我的问题不在于winzip,我只是把它作为一个例子(我还是使用winrar :).
在这种情况下,如何以编程方式在Matlab中按Enter键?(我用win 7)
可以使用事件监听器来解决这个问题吗?
编辑:java.awt.Robot类确实适用于资源管理器,但不适用于任何具有需要按下确定按钮的弹出窗口的软件.我不知道为什么它不起作用.我给了winzip的例子,因为我假设每个人都在他们的机器上安装了winzip/winrar.我拥有的实际软件与此问题不同且无关紧要.
显然,可以使用fgetl或类似函数循环遍历文件并递增计数器,但有没有办法确定文件中的行数而不进行这样的循环?
我想比较不同分类器的不同错误率与弱学习者的错误率(优于随机猜测).所以,我的问题是,对于一个简单,易于处理的弱学习者,有哪些选择?或者,我是否理解错误的概念,并且我选择的任何基准测试都是弱学习者(例如,线性回归)?
我n-by-m-by-t在MATLAB中有一个3d矩阵()表示n-by-m一段时间内网格中的测量值.我想有一个二维矩阵,其中空间信息不见了,只有n*m随着时间的推移测量t留(即:n*m-by-t)
我怎样才能做到这一点?
我需要将文件复制到字符串中.我需要为该字符串对象预先分配内存以及直接将文件内容读入该字符串内存的方法吗?
我希望能够NxN使用lapack 计算C/C++中一般矩阵的逆矩阵.
我的理解是在lapack中进行反转的方法是使用dgetri函数,但是,我无法弄清楚它的所有参数应该是什么.
这是我的代码:
void dgetri_(int* N, double* A, int* lda, int* IPIV, double* WORK, int* lwork, int* INFO);
int main(){
double M [9] = {
1,2,3,
4,5,6,
7,8,9
};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你将如何完成它以3x3使用dgetri_ 获得矩阵M 的逆?
在官方文件规定如下:
.但我注意到除了上表中所述的其他重要区别之外.
例如,在MATLAB中保存一个占用176 MB内存的大约6,000个元素的单元格数组,根据我是使用-v7还是-v7.3,给出了以下结果:
有没有人注意到这些差异?
更新1:正如回复指出的那样,-v7.3依赖于HDF5并且根据Mathworks,"这种格式具有显着的存储开销",尽管不清楚这种开销是否真的是由于格式本身,还是由于MATLAB相反,实现和处理HDF5.
更新2:@Andrew Janke向我们指出了这个非常有用的PDF(显然在网上没有HTML格式).有关更多详细信息,请参阅@Amro提供的答案中的注释.
这一切都需要我下一个问题:是否有任何替代方案,结合了两者的优点(如效率-V7和处理大量文件的能力- 7.3版)?