从 C++ 将带有空格的 argv 解析为 Python 脚本

Parsing argv with spaces to Python script from C++

我有几个 Python 脚本来处理从互联网上 API 收到的 json 对象。现在,我的主要应用程序是用 C++ 编写的(它用于 GUI 和我的 API 密钥保护)。我从用户那里获取了 2 个输入。其中一个是昵称,可以有空格。现在,当我在 args 中将它们传递给 C++ 程序(现在它只作为控制台应用程序编写)时,它在我只使用 "" 时工作,但随后:

W:\src>XD "nickname with spaces" summoner_by_name
nickname with spaces
summoner_by_name
python main.py API_KEY nickname with spaces summoner_by_name

ARGV:
main.py
API_KEY
nickname
with
spaces
summoner_by_name
END OF ARGV

所以第一部分是这段代码的一部分:

int main(int argc, char** argv){
    std::string name = argv[1];
    std::string command = argv[2];
    std::cout << name << std::endl;
    std::cout << command << std::endl;
    std::cout << python + API_KEY + " " + name + " " + command << std::endl;
    system((python + API_KEY + " " + name + " " + command).c_str());
    return 0;
}

第二部分是这段代码的一部分:

def main(argv):
    API_KEY = argv[1]
    NAME = argv[2]
    print("ARGV:")
    for i in argv:
        print(i)
    print("END OF ARGV")

所以看起来 C++ 传递了 2 个值而没有 "",这就是它不起作用的原因(我尝试自己在 cmdline 中用引号传递它 - 它起作用了)。不过它适用于 Linux。我怎样才能用空格传递这些值?

在构造系统调用的命令行时,您可能需要自己引用字符串:

system((python + API_KEY + " \"" + name + "\" " + command).c_str());