如何使用 python 运行 Hello world C++ 代码

2023-11-21

我想知道如何创建运行 C++ 代码的 python 脚本。

我确实找到了一些关于子进程模块的讨论,但它用于运行命令 我确实找到了一些关于 Boost 和 Swig 的讨论,但作为初学者我不明白如何使用它们

测试子流程:

import subprocess
subprocess.call(["g++", "main.cpp"],shell = True)
tmp=subprocess.call("main.cpp",shell = True)
print("printing result")
print(tmp)

任何人都可以帮助我吗?


一个简单的例子是创建一个.cpp file:

// cpy.cpp
#include <iostream>

int main()
{
    std::cout << "Hello World! from C++" << std::endl;
    return 0;
}

还有一个 Python 脚本:

// cpy.py
import subprocess
cmd = "cpy.cpp"
subprocess.call(["g++", cmd])
subprocess.call("./a.out")

然后在终端中运行 Python 脚本:

~ python cpy.py
~ Hello World! from C++

EDIT:

如果您想要控制从 Python 调用 C++ 函数,则需要创建绑定以使用 C++ 扩展 Python。这可以通过多种方式完成,Python 文档有关于如何在简单情况下完成此操作的完整原始实现,而且还有 pybind 和 boost.Python 等库可以为您完成此操作。

使用 boost.Python 的示例:

// boost-example.cpp
#include <iostream>
#include <boost/python.hpp>

using namespace boost::python;

int printHello()
{
    std::cout << "Hello, World! from C++" << std::endl;
}

BOOST_PYTHON_MODULE(hello)
{
        def("print_hello", printHello);
}

您将需要创建一个共享对象文件 (.so) 并确保链接适当的 Python 标头和库。一个例子可能看起来像:

g++ printHello.cpp -fPIC -shared -L/usr/lib/python2.7/config-3.7m-x86_64-linux-gnu/ -I/usr/include/python2.7 -lpython2.7 -lboost_python -o hello.so

在您创建的同一目录中hello.so file:

python
>>> import hello
>>> hello.print_hello()
Hello, World! from C++

Boost.Python 可以用来做一些非常神奇的事情,包括公开类、包装重载函数、公开全局变量和类变量以供读写、混合 Python/C++ 继承层次结构,所有这些都可以显着提高性能。 我建议通过these如果您想走这条路,请阅读文档并了解 API。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 python 运行 Hello world C++ 代码 的相关文章

  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 找到数字列表中最大(最大、最大)的数字

    如何轻松找到给定数字列表中的最大数字 See also How do I find the maximum larger greater of 2 numbers in that special case the two values ca
  • InAPPBilling 中 IABHelper 和 IInAppBillingService 的区别

    在 InAppBilling V3 的 google 文档中 他们使用 IInAppBillingService 进行购买 检查以下网址 http developer android com google play billing bill
  • 通过 PHP 呈现纯文本

    出于某种原因 我想通过 PHP 脚本提供 robots txt 我已经设置了 apache 以便 robots txt 文件请求 实际上是所有文件请求 到达单个 PHP 脚本 我用来渲染 robots txt 的代码是 echo User
  • iOS:CellForRowAtIndexPath 单元格变得混乱

    首先要说我已经看到了这些问题 iOS UITableView 滚动太快时会混合数据 自定义 UITableViewCell 滚动后混合 在 UITableView 中滚动后项目混合在一起 第一个和最后一个似乎与我的问题非常相关 但是我相当确
  • 我可以将哪些参数传递给 dbConnect?

    要连接到 SQLite 数据库 相当简单 传递驱动程序和 SQLite 文件的路径 对于他人DBI 兼容的数据库后端 PostgreSQL MySQL 等 您可以传递给什么dbConnect不明显 也没有很好的记录 我如何知道我可以传递给什
  • 组合字典时Dask延迟未指定长度的对象不可迭代错误

    我正在尝试使用 dask 并行构建字典 但是我遇到了TypeError Delayed objects of unspecified length are not iterable 我正在尝试计算add subtract and multi
  • 值得删除大型代码库中未使用的导入吗?

    运行检查未使用的脚本后imports例如import XYZ from dir XYZ jsx where XYZ从未使用过 我遇到过大约 300 个存在此类问题的文件 大多数这些文件都缺少类似的东西 例如Proptypes对于反应 imp
  • 将项目从一个列表转移到另一个列表的更简洁的方法

    我一直在编写一款文本冒险游戏 有时我需要从一个列表中获取由用户输入给出的项目并将其移动到另一个列表 具体来说 当您知道项目名称时 除了以下内容之外 还有什么方法可以获取项目的索引 list one item one item two ind
  • 为什么赋予 RegExp 构造函数的字符串需要双重转义?

    在下面的正则表达式中 s表示空格字符 我想象正则表达式解析器正在遍历字符串并看到 并且知道下一个字符是特殊的 但情况并非如此 因为需要双重转义 为什么是这样 var res new RegExp s foo test moo 有没有具体的例
  • 如何使用数据库中的数据填充 JavaFX ChoiceBox?

    private void initialize loadPersistenceContext List
  • ReactJS - 需要单击两次才能设置状态并运行函数

    以下是我的 React 组件中的代码摘要 getInitialState function return link onClick1 function this setState link Link1 this otherFunction
  • 如何验证数组?

    我正在尝试使用敲除验证库验证对象数组 对我来说 如何为一组可观察值形成验证组并不简单 我设法让它发挥作用的唯一方法是这样的 包含 JSFIDLE var Note function var self this self name ko ob
  • 将 MySQL UTF8 迁移到 UTF8MB4 问题和疑问

    我正在尝试将 UTF8 MySQL 5 5 30 数据库转换为 UTF8MB4 我看过这篇文章https mathiasbynens be notes mysql utf8mb4但有一些问题 我已经做了这些 ALTER DATABASE d
  • 在 Java 中单击按钮在 JPanel 中画一条线

    我想在 JPanel 中画一条线 这是我的 GUI 我希望 JPanel 中有一条白色的线 我找到了很多例子 但问题是如何使用它 在许多示例中 他们总是在从 JPanel 扩展的 JFrame 中绘制 我想将面板添加到框架中 并添加一些按钮
  • 使用 Oracle PL/SQL 中的 Web 服务

    如今 我们的应用程序正在与许多 Web 服务进行交互 我们有自己的包 几年前有人使用 UTL HTTP 编写了它 它通常可以工作 但需要对 SOAP 信封进行一些硬编码才能与某些系统一起工作 我想让它更通用 但缺乏经验来知道我必须处理多少场
  • Twitter Bootstraps config.json - 它有什么作用?

    我正在尝试找到一种方法来仅包含特定的引导程序部分 css 或 js 但到目前为止 我只是写下了我正在使用的内容的列表 然后在其定制器页面上勾选这些框 然而我注意到一个config jsonzip 文件中下载的文件 它有什么作用 我目前使用b
  • 为 Primefaces 多选数据表实现动态上下文菜单

    我有一个带有上下文菜单的分页 PrimeFaces 数据表 我希望实现多选 其中上下文菜单中的菜单项将取决于所选项目的数量 因为某些操作仅在仅选择一个项目时才可用 其他选择一项或多项后才有效 我的第一个想法是使用各个菜单项的 渲染 选项 该
  • shell 脚本的漂亮打印

    我正在寻找类似的东西indent但对于 bash 脚本 仅控制台 无着色等 你知道其中之一吗 Vim 可以缩进 bash 脚本 但在缩进之前不要重新格式化它们 备份你的bash脚本 用vim打开它 输入gg GZZ和缩进将被纠正 不耐烦的人
  • 在 Excel 2007 中编写 VBA 以在 Excel 2003 中使用

    我所在的开发人员已经更新到 Excel 2007 但大多数用户还没有 我正在为需要包含一些 vba 代码的用户构建一个电子表格模板 xlt 我想知道在 2007 年而不是 2003 年构建此模板时可能会遇到哪些问题 我无法使用装有 Exce
  • 如何使用 python 运行 Hello world C++ 代码

    我想知道如何创建运行 C 代码的 python 脚本 我确实找到了一些关于子进程模块的讨论 但它用于运行命令 我确实找到了一些关于 Boost 和 Swig 的讨论 但作为初学者我不明白如何使用它们 测试子流程 import subproc