كيف يمكنني الحصول على الرموز غير العلمية وغير الخيارات بعد التعزيز :: Program_Options يوزع سطر الأوامر My Args

StackOverflow https://stackoverflow.com/questions/1314717

سؤال

في بيثون، يمكنني بناء بلدي 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 وكلها مجموعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top