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

时间:2017-01-01 19:40:03

标签: python c++ cmd argv

我有一些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。如何用空格传递这些值?

1 个答案:

答案 0 :(得分:1)

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

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