首页 / PYTHON / 从Python脚本控制C输出
从Python脚本控制C输出
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从Python脚本控制C输出,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3320字,纯文字阅读大概需要5分钟。
内容图文
![从Python脚本控制C输出](/upload/InfoBanner/zyjiaocheng/748/4451db2aa57b44058356f0b82cf00d11.jpg)
我这里有点问题.我有一个Python脚本调用从C编译的二进制文件. Python脚本有自己的一组输出(标准输出和错误),这些输出很容易禁用. C二进制文件也有自己的一组输出(标准输出和错误,以及其他输出);来源可以改变,但我不是原作者.这是一个问题,因为我不想在我的最终程序中输出C,而且我也不希望将来的用户需要编辑C源代码.
我希望能够做的是有一些Python方法可以捕获发送到标准输出或错误的C代码输出.这可能吗?如果是这样,有人会指出我正确的方向吗?
谢谢!!
解决方法:
一种方法是:
>使用os.dup在python中复制stdout和stderr的文件描述符.
>使用重新打开(从C的stdio)重定向原始stdout和stderr以写入您选择的文件.
注意:重新打开不能直接从python中获得,但您应该能够像下面的示例中那样调用它,或者使用任何其他可用的包装器.
完成后:
>每次写入cout和cerr都会写入输出文件.
> python中的每个print语句都将写入输出文件.
但是,由于原始描述符是重复的,您仍然可以(参见下面的示例):
>使用sdout.write和stdout.err打印到原始stdout / stderr
>正确配置stream参数后使用日志记录方法
以下代码使用instant库来测试使用SWIG包装到python中的真实C代码,它应该类似于您拥有的库:
import sys, os
import logging
from instant import inline
print 'This is printed from python to stdout'
stdout = os.fdopen(os.dup(sys.stdout.fileno()), 'w')
stderr = os.fdopen(os.dup(sys.stderr.fileno()), 'w')
logging.basicConfig(stream=stderr, level=logging.DEBUG)
redirect = inline("""
void redirect(void) {
freopen("my_stdout.txt", "w", stdout);
freopen("my_stderr.txt", "w", stderr);
}
""")
redirect()
cout = inline("""
void cout(void) {
std::cout << "This is written from C++ to my_stdout.txt" << std::endl;
std::cerr << "This is written from C++ to my_stderr.txt" << std::endl;
}
""")
cout()
print 'This is written from python to my_stdout.txt'
stdout.write('This is printed from python to stdout\n')
stderr.write('This is printed from python to stderr\n')
logging.info('This is printed to stderr from python using logging')
此示例的输出是:
$python test.py
This is printed from python to stdout
This is printed from python to stdout
This is printed from python to stderr
INFO:root:This is printed to stderr from python using logging
$cat my_stdout.txt
This is written from C++ to my_stdout.txt
This is written from python to my_stdout.txt
$cat my_stderr.txt
This is written from C++ to my_stderr.txt
注意:第一次执行代码时,您可能会收到gcc编译消息(我已删除它们以使示例更清晰).
内容总结
以上是互联网集市为您收集整理的从Python脚本控制C输出全部内容,希望文章能够帮你解决从Python脚本控制C输出所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。