簡體   English   中英

如何使用 python 運行 Hello world c++ 代碼

[英]How can I run a Hello world c++ code using python

我想知道如何創建運行 c++ 代碼的 python 腳本。

我確實找到了一些關於 subprocess 模塊的討論,但它用於運行命令 我確實找到了一些關於 Boost 和 Swig 的討論,但作為初學者,我不明白如何使用它們

測試子流程:

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

任何人都可以幫助我嗎?

一個簡單的例子是創建一個.cpp文件:

// 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++

編輯:

如果你想控制從 Python 調用 C++ 函數,你需要創建綁定來擴展 Python 和 ZA7F6F87F87C9FDF183732097.CFCF18 這可以通過多種方式完成,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);
}

您需要創建一個共享的 object 文件 (.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文件的同一目錄中:

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

Boost.Python 可以用來做一些非常神奇的事情,包括公開類、包裝重載函數、公開全局變量和 class 變量以進行讀寫、混合 Python/C++ Z5FED3411FAF832274EF1F040028 如果您正在尋找 go,我建議您閱讀這些文檔並了解 API。

作為將 C++ 代碼編譯到單獨的程序中並執行該程序的替代方法,您還可以使用 cppyy ( http://cppyy.org ) 直接在相同的程序中運行 ZF6F87C9FDCF8B3C3F07F93F1EEIT8712 代碼,

例子:

import cppyy
cppyy.cppdef('''
void hello() {
    std::cout << "Hello, World!" << std::endl;
}''')
cppyy.gbl.hello()   # calls the C++ function 'hello' defined above

您可以使用 python 的 .os 模塊來運行 os 命令。

import os
myCmd1 = 'ls -la'
os.system(myCmd)

你的命令可以是'g++ main.cpp second.cpp -o run',然后你可以使用相同的機制來調用./run shell。

確保您擁有正確的權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM