从 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());
我有几个 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());