كيف يمكنني الحصول على الرموز غير العلمية وغير الخيارات بعد التعزيز :: Program_Options يوزع سطر الأوامر My Args
-
19-09-2019 - |
سؤال
في بيثون، يمكنني بناء بلدي Opplse. مثيل بحيث ستقوم تلقائيا بتصفية الخيارات وغير الخيارات / الأعلام إلى اثنين من الدلاء المختلفة:
(options, args) = parser.parse_args()
مع زيادة :: Program_Options، كيف يمكنني استرجاع قائمة الرموز التي هي الرموز غير الخيار غير المتبقية وغير العلمية؟
على سبيل المثال إذا كان برنامجي لديه أعلام
--foo
--bar BAR
ثم اجتيازها في سطر الأوامر:
--foo hey --bar BAR you
كيف يمكنني الحصول على قائمة تتألف فقط من الرموز "مهلا" و "أنت"
المحلول
IIRC، عليك استخدام مزيج من positional_options_description
و الخيارات الخفية. وبعد الفكرة هي (1) إضافة خيار عادي ومنحها اسما، ربما شيء مثل --positional=ARG
, ، (2) لا تشمل هذا الخيار في وصف المساعدة، (3) تكوين command_line_parser
لعلاج جميع الحجج الموضعية كما لو --positional
تم تحديده، و (4) استرداد الحجج الموضعية باستخدام vm["positional"].as< std::vector<std::string> >()
.
ربما يكون هناك مثال في مكان ما في شجرة المصدر ولكن ليس لدي هذا الجهاز الآن.
نصائح أخرى
هنا مثال:
namespace po = boost::program_options;
po::positional_options_description m_positional;
po::options_description m_cmdLine;
po::variables_map m_variables;
m_cmdLine.add_options()
(/*stuff*/)
("input", po::value<vector<string> >()->composing(), "")
;
m_positional.add("input", -1);
po::parsed_options parsed = po::command_line_parser(argc, argv)
.options(m_cmdLine)
.positional(m_positional)
.allow_unregistered()
.run();
// store, notify, etc
ثم احصل فقط على خيارات "الإدخال" باسم Vector of Strings وكلها مجموعة.