2017-01-01 5 views
1

インターネットからいくつかのAPIから受け取ったjsonオブジェクトを処理するPythonスクリプトがいくつかあります。今、私の主なアプリはC + +で書かれています(GUIと私のAPIキー保護用)。私はユーザーから2つの入力を受け取ります。それらの1つはニックネームであり、スペースを持つことができます。今、私はCに引数に渡すとき++、プログラム(現在、唯一のコンソールアプリケーションとして書かれた)、私はちょうど""を使用する場合、それは動作しますが、:C++からのPythonスクリプトへのスペースでのargvの解析

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; 
} 

そして第二部

は、このコードの一部です:だからC++が ""せずに2つの値を渡すように思える

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

、それが働いていない理由ですg(私は引用符でcmdlineでそれを自分自身に渡そうとしました - それがうまくいった)。 Linuxでも動作します。これらの値をスペースでどうやって渡すことができますか?

答えて

1

あなたはおそらく、システムコールのためのコマンドラインを構築する際に自分で文字列を引用する必要があります。

system((python + API_KEY + " \"" + name + "\" " + command).c_str()); 
関連する問題