【问题标题】:Using Main() return value as an argument for a python script使用 Main() 返回值作为 Python 脚本的参数
【发布时间】:2020-06-16 10:41:00
【问题描述】:

我希望我的 C++ 进程传递它们的返回值来打开一个 Python 脚本。

cpp 示例文件

int main()

{
   //do something
   //process is going to finish and is gonna return, for simplicity, 0
   //retval = 0, or whatever the return value is going to be 
   popen("mypython_script.py retval")
   return 0;
}

mypython_script.py

if __name__ == "__main__":
    cpp_retval = sys.argv[1]
    print(cpp_retval)

我不知道 C++ 文件是否可以按照描述发送它们的返回值,但这只是我想要实现的一般行为。

我还可以控制每个 C++ 进程的父进程:它是另一个 python 脚本,负责打开 C++ 文件并在需要时终止它们的进程,所以如果您有一个涉及使用父进程获取从“cpp 示例文件”返回值,这非常受欢迎

编辑:我忘了补充一点,我不能要求父 python 进程等待 C++ 程序返回一些东西。我的程序中决不能有任何形式的“等待”。

【问题讨论】:

标签: python c++ return-value popen


【解决方案1】:

如果您使用cpp_retval = subprocess.call(...)cpp_retval = subprocesss.run(...).returncode (https://docs.python.org/3/library/subprocess.html) 运行C++ 程序,您可以从父python 脚本捕获C++ 程序的返回值。

然后您可以将其传递给其他 python 脚本。所以,是这样的:

cpp_retval = subprocess.call(["my_cpp_program.exe"])
subprocess.call(["my_python_script.py", str(cpp_retval)])

如果你想直接将值从 C++ 程序传递给 python 脚本,你可以这样做:

#include <cstdlib> // std::system
#include <string>

int main()
{
  const int retval = do_stuff();
  std::system((std::string("my_python_script.py") + ' ' + std::to_string(retval)).c_str());

  return retval;
}

【讨论】:

  • 我在 python 中使用 subprocess 解决方案遇到的问题是我必须等待 C++ 程序完成,我不能等待,因为我的整个项目甚至不能浪费一毫秒我也无法预测程序是否应该返回某些东西(其中一些在(while True)循环下无限期地工作)但是 C++ 解决方案似乎非常可行和简单
猜你喜欢
  • 2018-03-04
  • 1970-01-01
  • 2018-10-02
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2015-02-19
相关资源
最近更新 更多