আপনি সুইফটে একটি কমান্ড লাইন অ্যাপ্লিকেশনটির জন্য কমান্ড লাইন যুক্তিগুলি কীভাবে অ্যাক্সেস করবেন?
আপনি সুইফটে একটি কমান্ড লাইন অ্যাপ্লিকেশনটির জন্য কমান্ড লাইন যুক্তিগুলি কীভাবে অ্যাক্সেস করবেন?
উত্তর:
অ্যাপল কেবল এটি করার ArgumentParser
জন্য লাইব্রেরি প্রকাশ করেছে :
আমরা ঘোষণা করতে পেরে আনন্দিত
ArgumentParser
, একটি নতুন ওপেন-সোর্স লাইব্রেরি যা এটিকে সোজা - এমনকি উপভোগ্য করে তোলে! - সুইফটে কমান্ড-লাইন যুক্তি পার্স করতে।
https://github.com/apple/swift-argument-parser
কমান্ড লাইন থেকে আপনার সংগ্রহ করা প্রয়োজনীয় তথ্য সংজ্ঞায়িত করে এমন একটি প্রকার ঘোষণা করে শুরু করুন। প্রতিটি সঞ্চিত সম্পত্তিকে
ArgumentParser
যেকোন একটির সম্পত্তি মোড়ক দিয়ে সাজান, এবং এর সাথে সম্মতি ঘোষণা করুনParsableCommand
।
ArgumentParser
গ্রন্থাগার কমান্ড লাইন আর্গুমেন্ট পারেন parses, আপনার আদেশ টাইপ instantiates, এবং তারপর আপনার কাস্টম executesrun()
দরকারী একটি বার্তা পদ্ধতি বা প্রস্থানের।
আপডেট 01/17/17: আপডেট হয়েছে সুইফট 3 Process
এর উদাহরণটি নতুন নামকরণ করা হয়েছে CommandLine
।
আপডেট 09/30/2015: সুইফট 2 এ কাজ করার উদাহরণ আপডেট করেছে।
এটা আসলে ফাউন্ডেশন ছাড়া এই কাজ করতে সম্ভব বা C_ARGV
এবং C_ARGC
।
সুইফ্ট স্ট্যান্ডার্ড লাইব্রেরিতে এমন একটি স্ট্রাক্ট রয়েছে CommandLine
যার মধ্যে String
ডাকা সংকলন রয়েছে arguments
। সুতরাং আপনি এই জাতীয় যুক্তিগুলি স্যুইচ করতে পারেন:
for argument in CommandLine.arguments {
switch argument {
case "arg1":
print("first argument")
case "arg2":
print("second argument")
default:
print("an argument")
}
}
Process.arguments
হিসাবে একই NSProcessInfo.processInfo().arguments
?
Process
অবজেক্টটি এখন CommandLine
অবজেক্ট হিসাবে পরিচিত । সুইফট ৩.০ আনুষ্ঠানিকভাবে প্রকাশিত হলে এটি সম্ভবত সম্পূর্ণরূপে সংহত হবে।
শীর্ষ স্তরের স্থির C_ARGC
এবং ব্যবহার করুন C_ARGV
।
for i in 1..C_ARGC {
let index = Int(i);
let arg = String.fromCString(C_ARGV[index])
switch arg {
case "this":
println("this yo");
case "that":
println("that yo")
default:
println("dunno bro")
}
}
নোট করুন যে আমি ব্যাপ্তিটি ব্যবহার করছি 1..C_ARGC
কারণ এর প্রথম উপাদানটিC_ARGV
"অ্যারে" এর হ'ল অ্যাপ্লিকেশনটির পথ।
C_ARGV
পরিবর্তনশীল আসলে একটি অ্যারের নয় কিন্তু উপ-স্ক্রিপ্টেবল একটি অ্যারের ভালো হয়।
C_ARCG
আর সমর্থিত বলে মনে হচ্ছে না।
Process.argc
এবং Process.arguments
এই জন্য, যদিও এটা ভালো দেখায় পরিবর্তন করা যেতে পারে CommandLine.argc
এবং CommandLine.arguments
ভাষা থেকে সাম্প্রতিকতম পরিবর্তনের সঙ্গে।
যে কেউ পুরানো "getopt" (যা সুইফটে পাওয়া যায়) ব্যবহার করতে চায় এটি এটিকে রেফারেন্স হিসাবে ব্যবহার করতে পারে। আমি সিটিতে জিএনইউ উদাহরণের একটি সুইফট বন্দর তৈরি করতে পারি যার মধ্যে এটি পাওয়া যাবে:
http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
একটি সম্পূর্ণ বিবরণ সহ। এটি পরীক্ষিত এবং সম্পূর্ণরূপে কার্যক্ষম। এটি ফাউন্ডেশন প্রয়োজন হয় না।
var aFlag = 0
var bFlag = 0
var cValue = String()
let pattern = "abc:"
var buffer = Array(pattern.utf8).map { Int8($0) }
while true {
let option = Int(getopt(C_ARGC, C_ARGV, buffer))
if option == -1 {
break
}
switch "\(UnicodeScalar(option))"
{
case "a":
aFlag = 1
println("Option -a")
case "b":
bFlag = 1
println("Option -b")
case "c":
cValue = String.fromCString(optarg)!
println("Option -c \(cValue)")
case "?":
let charOption = "\(UnicodeScalar(Int(optopt)))"
if charOption == "c" {
println("Option '\(charOption)' requires an argument.")
} else {
println("Unknown option '\(charOption)'.")
}
exit(1)
default:
abort()
}
}
println("aflag ='\(aFlag)', bflag = '\(bFlag)' cvalue = '\(cValue)'")
for index in optind..<C_ARGC {
println("Non-option argument '\(String.fromCString(C_ARGV[Int(index)])!)'")
}
আপনি CommandLine.arguments
অ্যারে ব্যবহার করে একটি যুক্তি পার্সার তৈরি করতে এবং আপনার পছন্দ মতো কোনও যুক্তি যুক্ত করতে পারেন।
আপনি এটি পরীক্ষা করতে পারেন। একটি ফাইল তৈরি করুনarguments.swift
//Remember the first argument is the name of the executable
print("you passed \(CommandLine.arguments.count - 1) argument(s)")
print("And they are")
for argument in CommandLine.arguments {
print(argument)
}
এটি সঙ্কলন এবং এটি চালান:
$ swiftc arguments.swift
$ ./arguments argument1 argument2 argument3
আপনার নিজের আর্গুমেন্ট পার্সার তৈরির বিষয়টি আপনার কমান্ড-লাইন আর্গুমেন্ট কনভেনশনগুলিকে বিবেচনা করছে। আমি একটি বিদ্যমান আর্গুমেন্ট পার্সার ব্যবহার করার পরামর্শ দেব।
আপনি ব্যবহার করতে পারেন:
আমি তিনটিতে কমান্ড-লাইন সরঞ্জাম কীভাবে তৈরি করবেন সে সম্পর্কে লিখেছি। আপনার এটি পরীক্ষা করে নেওয়া উচিত এবং কোন স্টাইলটি আপনার পক্ষে সবচেয়ে উপযুক্ত।
আপনি যদি আগ্রহী হন তবে এখানে লিঙ্কগুলি রয়েছে: