通过std :: system调用python时出错

Lua*_*Lua 6 c++ python qt cmd std

当我尝试使用此方法在c ++中调用python时:

QString command = "cd C:\\python\\python37 && python C:\\projects\\file_editor.py" 
QByteArray ba = command.toLocal8Bit();
const char *c_str2 = ba.data();
std::system(c_str2)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这一问题?

编辑: 我在PATH变量中与python相关的路径是:

C:\python\python37\Scripts

Run Code Online (Sandbox Code Playgroud)

我可以使用Qt,我也尝试过此操作:

Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
Run Code Online (Sandbox Code Playgroud)

但是然后我得到这个错误:

QProcess: Destroyed while process ("python") is still running.
Run Code Online (Sandbox Code Playgroud)

Mat*_*990 1

目标:

在 C++ 中执行 python 脚本

问题:

使用system或QProcess会报错

解决方案:

我认为问题是,当你从其他驱动器调用 python 时,它无法找到该模块,所以尝试将你的程序放在与 python 相同的驱动器上,它会工作。

例子:

这是一个简单的例子,你的文件树可能意味着什么

- pc
    - D
        [...]
        - myqtproject
            - source code
            - bin
    - C
        [...]
        python37
Run Code Online (Sandbox Code Playgroud)

那么这是错误的,因为 python 现在找不到他的任何库,因为它位于其他驱动器上,所以您需要将 qt 项目放在 C 盘上,它将如下所示:

- pc
    - C
        - projects
            - myqtproject
                - source code
                - bin
        [...]
        python37
    - D
        [...]
Run Code Online (Sandbox Code Playgroud)

你需要替换 process.start("python", pythonCommandArguments);process.startDetached("python", pythonCommandArguments); ,这会起作用