2017-01-01 4 views
1

У меня есть несколько скриптов Python для обработки объекта json, полученного от некоторого API из Интернета. Теперь мое основное приложение написано на C++ (его для GUI и для моей защиты ключа API). Я беру 2 входа от пользователя. Один из них - прозвище, и он может иметь пробелы. Теперь, когда я прохожу их в аргументах к программе (теперь его только записывается в виде консольного приложения) C++ это работает, когда я просто использовать "", но потом:Разбор argv с пробелами для скрипта Python из 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 значения без "", и именно поэтому он не работает g (я попытался передать его сам в cmdline с кавычками - он работал). Однако он работает на Linux. Как передать эти значения с пробелами?

ответ

1

Вы, вероятно, необходимо процитировать строковые себя при построении командной строки для системного вызова:

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

 Смежные вопросы

  • Нет связанных вопросов^_^