【问题标题】:How to call python from c++如何从 C++ 调用 python
【发布时间】:2017-05-24 10:27:55
【问题描述】:

我是 Python 新手。我试图像这样(在 Raspberry Pi 中)从 c++ 调用 python 脚本。

std::string pythonCommand = "python Callee.py \""+a+"\" "+b;
int res = system(pythonCommand.c_str());

运行后我得到了这个。

python: can't open file 'Callee.py': [Errno 2] No such file or directory

但是我可以使用命令行成功运行 Callee.py 并且两个文件都存储在同一个目录中。

我错过了什么?

【问题讨论】:

  • 提防code injection
  • 证明路径对我有用
  • 链接python并使用本机解释器而不是通过系统不是更好吗?
  • 我不知道该怎么做,我是 python 的新手。

标签: python c++ raspberry-pi


【解决方案1】:

您可能正在某个奇怪的目录(即在您所期望的其他目录中)中运行 python 解释器(和您的 python Callee.py 命令)。

您可以在致电system(3) 之前使用getcwd(3) 来找出您当前的工作目录。

您可以使用chdir(2) 系统调用(在调用system 之前)将目录更改为适当的目录。或许见this

我也推荐阅读Advanced Linux Programming

另请阅读Extending and Embedding the Python Interpreter;但如果你需要嵌入一些解​​释器,也可以考虑Guile & Lua

【讨论】:

    【解决方案2】:

    你可以试试这样的

    system("/work/test/pythonscript.sh")
    

    并在此脚本中定义您的 python 脚本是如何执行/调用的。

    这样您就不会因格式错误而绊倒(c_string() 和“\r”或依赖于操作系统的行尾)

    【讨论】:

    • 只有当 /work/test/pythonscript.sh 文件是可执行的并且以适当的 shebang 开头时才会起作用
    • 你是对的。但是因为 OP 提到了一个Callee.py 脚本,我想这个问题已经被关注了。只有在 linux 机器上运行它才有效,对于其他操作系统,您需要正确编辑路径
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 2020-02-07
    • 2011-11-14
    相关资源
    最近更新 更多