我有一个C程序,它公开了一个
Python接口来执行用户的嵌入式Python脚本.
用户插入要运行的Python脚本的路径和命令行参数.
然后脚本执行完毕
boost::python::exec_file(filename, main_globals, main_globals)
要将命令行参数传递给Python脚本,我们必须通过Python C-API函数设置它们
PySys_SetArgv(int args, char** argv)
在调用exec_file()之前.
但是这需要标记包含命令行参数的用户字符串以获取参数列表,然后通过PySys_SetArgv将它们传递回Python解释器.
这不仅仅是浪费时间,因为这样主要的C程序必须负责对命令行字符串进行标记,而不知道后面的逻辑,这只在自定义用户的脚本中定义.
在metacode中,更好,更清晰的方法是这样的:
string command_line_args = '-v -p "filename" -t="anotherfile" --list="["a", "b"]" --myFunnyOpt'
exec_file( filename, command_line_args, ...)
我花了几个小时查看Boost和Python C-API文档,但我找不到任何有用的东西.
你知道是否有办法实现这一点,即传递一整串命令行
来自C的嵌入式Python脚本的参数?
更新:
在我的情况下我用过:
// defining the separators
std::string escape_char = "\\"; // the escape character
std::string sep_char = " "; // empty space as separator
std::string quote_char = ""; // empty string --> we don't want a quote char'
boost::escaped_list_separator sep( escape_char, sep_char, quote_char );
因为我希望能够解析包含字符串的元组,例如:
'--option-two=("A", "B")'
如果您使用:
escaped_list_separator sep('\\', ' ', '"');
与在原始帖子中一样,您没有正确标记引用的字符串.