【问题标题】:How to call Python script with arguments from C++, using exec syscall如何使用 exec syscall 从 C++ 调用带有参数的 Python 脚本
【发布时间】:2019-08-29 08:52:17
【问题描述】:

我想从 C++ 程序调用 python 脚本作为子进程。

我想运行这个命令:/home/minty99/.virtualenvs/venv_waveglow/bin/python /home/minty99/tacotron2/inference.py mps 1 4

有 python 的命令行参数。

我试过这些代码:

string pt_arg = "mps " + to_string(i) + " " + to_string(fd[i][1]);

[1]execl("bash", "-c", "/home/minty99/.virtualenvs/venv_waveglow/bin/python /home/minty99/tacotron2/inference.py", pt_arg.c_str(), NULL);

[2]execl("/home/minty99/.virtualenvs/venv_waveglow/bin/python", "/home/minty99/tacotron2/inference.py", pt_arg.c_str(), NULL);

但它不起作用。

第一个:exec 失败并显示“没有这样的文件或目录”

第二个:/home/minty99/tacotron2/inference.py: can't open file 'mps 1 4': [Errno 2] 没有这样的文件或目录

我怎样才能正确地做到这一点?

【问题讨论】:

    标签: python c++ unix system-calls


    【解决方案1】:

    我没试过,但是看了execl的manpage,上面写着

    按照惯例,第一个参数应该指向文件名 与正在执行的文件相关联。

    在哪里

    int execl(const char *file, const char arg0, ... /, (char *)0 */);

    对我来说,这意味着你的第二个版本应该是这样的

    execl("/home/minty99/.virtualenvs/venv_waveglow/bin/python", "python", "/home/minty99/tacotron2/inference.py", pt_arg.c_str(), NULL);
    

    这是有道理的,因为如果您在 python 中获得参数列表,sys.argv[0] 将是“python”,而不是您的第一个参数。

    【讨论】:

      猜你喜欢
      • 2020-05-17
      • 1970-01-01
      • 2018-12-27
      • 2017-05-29
      • 1970-01-01
      • 2017-10-05
      • 2021-03-04
      • 1970-01-01
      • 2018-09-23
      相关资源
      最近更新 更多