Rexx ভাষা ব্যবহারে সাবপ্রসেস এবং এক্সটার্নাল কমান্ডের কার্যকারিতা গুরুত্বপূর্ণ ভূমিকা পালন করে। Rexx আপনাকে সিস্টেম কমান্ড বা এক্সটার্নাল প্রোগ্রাম চালাতে সাহায্য করে, যা আপনি আপনার কোডের মধ্যে অন্তর্ভুক্ত করতে পারেন। এটি একটি শক্তিশালী ফিচার, যা বিভিন্ন সিস্টেম টাস্ক এবং প্রক্রিয়া অটোমেট করার জন্য ব্যবহৃত হয়।
১. Subprocesses (সাবপ্রসেস)
Rexx এ সাবপ্রসেস চালানোর মাধ্যমে আপনি অন্য কোনো প্রোগ্রাম বা স্ক্রিপ্টকে Rexx প্রোগ্রাম থেকে পৃথকভাবে চালাতে পারেন। এটি মূলত একটি নতুন প্রসেস তৈরি করে এবং তার মাধ্যমে বাইরের প্রোগ্রাম চালায়। Rexx এ subprocess চালানোর জন্য address কমান্ড ব্যবহার করা হয়। এটি ব্যবহৃত হয় বাহ্যিক কমান্ড বা প্রোগ্রাম চালানোর জন্য।
সিনট্যাক্স:
address system "command"address system: এটি Rexx এ বাহ্যিক সিস্টেম কমান্ড বা সাবপ্রসেস চালাতে ব্যবহৃত হয়।command: এটি চালানোর জন্য প্রোগ্রাম বা কমান্ডের নাম।
উদাহরণ:
address system "dir" /* Windows এর জন্য */
address system "ls" /* UNIX বা Linux এর জন্য */উপরের কোডে, dir (Windows) বা ls (UNIX/Linux) কমান্ডটি Rexx প্রোগ্রামের মাধ্যমে চালানো হবে। এর মাধ্যমে সিস্টেমের ফাইল বা ডিরেক্টরি তালিকা পাওয়া যাবে।
২. External Commands (এক্সটার্নাল কমান্ডস)
Rexx এর মাধ্যমে আপনি সিস্টেমের বাহ্যিক কমান্ড বা প্রোগ্রাম চালাতে পারেন। এই বাহ্যিক কমান্ডগুলি প্রায়ই সিস্টেমের অপারেটিং সিস্টেমের সাথে সম্পর্কিত হয়, যেমন ls, dir, echo, ping, এবং অন্যান্য কমান্ড। Rexx এ বাহ্যিক কমান্ড চালানোর জন্য address system বা call ফাংশন ব্যবহৃত হয়।
সিনট্যাক্স:
address system "command"এখানে command হলো বাহ্যিক কমান্ড বা প্রোগ্রাম যা চালাতে হবে।
উদাহরণ:
address system "echo Hello, World!"এই কমান্ডটি সিস্টেমের echo কমান্ড ব্যবহার করে "Hello, World!" মেসেজ প্রিন্ট করবে।
আরেকটি উদাহরণ:
address system "ping 8.8.8.8"এটি গুগলের DNS সার্ভার (8.8.8.8) এর সাথে পিং করার জন্য বাহ্যিক কমান্ড চালাবে।
৩. Subprocess Output (সাবপ্রসেস আউটপুট)
Rexx আপনাকে subprocess এর আউটপুট ক্যাপচার করতে সাহায্য করে। যখন আপনি একটি বাহ্যিক কমান্ড বা প্রোগ্রাম চালান, তখন তার আউটপুট অন্য একটি পরিবর্তনশীল বা ফাইলের মধ্যে সংগ্রহ করা যেতে পারে। এই প্রক্রিয়াটি খুবই সহজ এবং শক্তিশালী।
সিনট্যাক্স:
output = ""
address system "command" outputএখানে output হলো একটি পরিবর্তনশীল, যেখানে subprocess এর আউটপুট জমা হবে।
উদাহরণ:
address system "date" output
say "Current date and time: " outputএই কোডে, date কমান্ডটি চলানোর মাধ্যমে বর্তমান তারিখ এবং সময় ক্যাপচার করা হবে এবং এটি output পরিবর্তনশীলে সংরক্ষিত হবে।
৪. Running Scripts as Subprocesses (স্ক্রিপ্ট সাবপ্রসেস হিসেবে চালানো)
Rexx ব্যবহার করে অন্য স্ক্রিপ্ট বা প্রোগ্রামও subprocess হিসেবে চালানো যেতে পারে। এটি বিশেষভাবে যখন আপনি কোনো স্ক্রিপ্টের আউটপুট বা ফলাফল অন্য কোনো স্ক্রিপ্টে ব্যবহার করতে চান তখন উপকারী।
উদাহরণ:
address system "python3 myscript.py"এখানে Rexx python3 myscript.py কমান্ডটি ব্যবহার করে Python স্ক্রিপ্ট myscript.py চালাবে।
৫. Wait for Process Completion (প্রসেস সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করা)
Rexx আপনাকে subprocess চালানোর পর সেই প্রসেসের সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করতে সহায়তা করে। এটি একটি সাধারণ ফিচার যা প্রোগ্রাম চলমান অবস্থায় subprocess এর সম্পন্ন হওয়া নিশ্চিত করে।
সিনট্যাক্স:
address system "command"এই কমান্ডটি subprocess চালানোর পর Rexx অপেক্ষা করবে যতক্ষণ না subprocess সম্পন্ন হয়।
উদাহরণ:
address system "ping -c 4 8.8.8.8"এখানে, ping কমান্ডটি -c 4 অপশন সহ চারটি পিং পাঠাবে এবং Rexx ততক্ষণ অপেক্ষা করবে যতক্ষণ না এটি সম্পন্ন হয়।
৬. Error Handling in Subprocess (সাবপ্রসেসে ত্রুটি পরিচালনা)
যখন আপনি Rexx দিয়ে একটি বাহ্যিক কমান্ড চালান, তখন কোনো ত্রুটি ঘটলে তার ফলাফলও গৃহীত হতে পারে। Rexx আপনাকে ত্রুটির ধরন এবং কোড শনাক্ত করতে সাহায্য করে।
উদাহরণ:
address system "nonexistent_command" result
if result then
say "Error: Command failed"
else
say "Command executed successfully"এখানে, যদি nonexistent_command কোনো ভুল বা অনুপস্থিত কমান্ড হয়, তাহলে ত্রুটি মেসেজ প্রিন্ট হবে।
সারাংশ:
Rexx তে subprocess এবং external commands চালানোর জন্য address system কমান্ড ব্যবহৃত হয়। এটি আপনাকে সিস্টেমের বাহ্যিক কমান্ড বা অন্য প্রোগ্রামগুলো চালাতে সক্ষম করে এবং তাদের আউটপুট ক্যাপচার করতে সাহায্য করে। subprocess ব্যবহার করার মাধ্যমে আপনি আপনার Rexx প্রোগ্রামের মধ্যে অন্য প্রোগ্রাম বা স্ক্রিপ্ট চালাতে পারেন, যা অনেক কাজে উপকারী হতে পারে, বিশেষ করে সিস্টেম অ্যাডমিনিস্ট্রেশন, ডেটা প্রসেসিং, এবং অটোমেশন কাজের জন্য।
প্রোগ্রামিং ভাষায় External Commands (বাহ্যিক কমান্ড) এবং Operating System Interaction (অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাকশন) অত্যন্ত গুরুত্বপূর্ণ বিষয়, কারণ এর মাধ্যমে প্রোগ্রাম অন্যান্য সফটওয়্যার এবং সিস্টেম কনফিগারেশন থেকে কমান্ড চালাতে পারে, ফাইল সিস্টেমে প্রবেশ করতে পারে এবং অপারেটিং সিস্টেমের সঙ্গে যোগাযোগ স্থাপন করতে পারে।
1. External Commands (বাহ্যিক কমান্ড)
বাহ্যিক কমান্ডগুলি হল সেই কমান্ডগুলি যা অপারেটিং সিস্টেমের শেলের মাধ্যমে প্রোগ্রামের বাইরে চলে। প্রোগ্রাম নিজে কোনো বাহ্যিক কমান্ড চালাতে পারে এবং সেই কমান্ডের আউটপুট ব্যবহার করতে পারে। Rexx এর মতো স্ক্রিপ্টিং ভাষা বাহ্যিক কমান্ড চালানোর জন্য ব্যবহৃত হয় এবং এটি বিভিন্ন সিস্টেম কাজ যেমন ফাইল পরিচালনা, প্রোগ্রাম চালানো, বা অন্যান্য অ্যাপ্লিকেশন ব্যবহার করতে সক্ষম।
External Commands এর ব্যবহার:
- ফাইল ম্যানিপুলেশন (যেমন:
cp,mv,rmকমান্ড) - প্রোগ্রাম চালানো
- সিস্টেমের বর্তমান অবস্থা চেক করা (যেমন:
ls,dir)
Rexx এ বাহ্যিক কমান্ড চালানো:
Rexx এ বাহ্যিক কমান্ড চালানোর জন্য call অথবা address স্টেটমেন্ট ব্যবহার করা হয়।
সিনট্যাক্স:
address SYSTEM "command"উদাহরণ:
/* Using external command in Rexx */
address SYSTEM "dir" /* For Windows */
address SYSTEM "ls" /* For Unix/Linux */এখানে, address SYSTEM "ls" Unix বা Linux সিস্টেমে ls কমান্ড চালাবে, যা বর্তমান ডিরেক্টরির ফাইল ও ডিরেক্টরি দেখাবে। Windows সিস্টেমে এটি dir কমান্ড ব্যবহার করবে।
আরেকটি উদাহরণ:
/* List files using 'ls' command in Unix/Linux */
address SYSTEM "ls -l /path/to/directory"এই কমান্ডটি /path/to/directory এর মধ্যে থাকা ফাইল ও ডিরেক্টরির লিস্ট প্রদান করবে।
2. Operating System Interaction (অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাকশন)
অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাকশন করা মানে হলো প্রোগ্রামটি সরাসরি অপারেটিং সিস্টেমের সাথে যোগাযোগ স্থাপন করতে পারে। এটি বিভিন্ন রকমের সিস্টেম টাস্ক সম্পাদন করতে পারে যেমন ফাইল সিস্টেমের পরিচালনা, প্রসেস নিয়ন্ত্রণ, এবং নেটওয়ার্ক অ্যাক্সেস।
Rexx এ অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাকশন:
Rexx এ অপারেটিং সিস্টেমের সঙ্গে যোগাযোগ স্থাপন করার জন্য address কমান্ড ব্যবহার করা হয়। এটি SYSTEM, EXEC, OS বা অন্যান্য সিস্টেম কনটেক্সট থেকে বাহ্যিক সিস্টেম কমান্ড চালাতে সক্ষম।
সিনট্যাক্স:
address SYSTEM "command"উদাহরণ:
ফাইল ম্যানিপুলেশন (Unix/Linux):
address SYSTEM "cp source_file.txt destination_file.txt" /* Copy a file */ address SYSTEM "rm unwanted_file.txt" /* Remove a file */Windows এ বাহ্যিক কমান্ড (dir কমান্ড):
address SYSTEM "dir C:\Program Files"Process Control (Unix/Linux):
address SYSTEM "ps aux" /* View running processes */
3. Environment Variables (পরিবেশ পরিবর্তনশীল)
অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাকশন করার সময়, পরিবেশ পরিবর্তনশীল (environment variables) ব্যবহার করে সিস্টেমের তথ্য পাওয়া যায়, যেমন সিস্টেমের পথ, ব্যবহারকারী নাম, সিস্টেমের টাইমজোন, এবং আরো অনেক তথ্য।
Rexx এ পরিবেশ পরিবর্তনশীল সংগ্রহ করতে value() ফাংশন ব্যবহার করা হয়।
উদাহরণ:
/* Get the value of the PATH environment variable */
path_value = value("PATH")
say "The system PATH is: " path_valueএই কোডটি সিস্টেমের PATH পরিবেশ পরিবর্তনশীলের মান রিটার্ন করবে এবং তা প্রদর্শন করবে।
4. Error Handling (ত্রুটি পরিচালনা)
অপারেটিং সিস্টেমের কমান্ড চালানোর সময় ত্রুটি ঘটতে পারে। Rexx এ ত্রুটি পরিচালনার জন্য rc (return code) ব্যবহার করা হয়, যা একটি কমান্ডের সাফল্য বা ব্যর্থতার জন্য নির্দেশিকা সরবরাহ করে।
উদাহরণ:
address SYSTEM "ls /nonexistent_directory"
if rc then
say "Error occurred while executing command"
else
say "Command executed successfully"এখানে, যদি ls কমান্ডটি কোনো ভুল ডিরেক্টরি খুলতে চেষ্টা করে, তাহলে rc 1 (ত্রুটি) রিটার্ন করবে এবং "Error occurred" প্রদর্শিত হবে।
সারাংশ:
- External Commands: বাহ্যিক কমান্ড হলো সিস্টেমে প্রোগ্রাম বাইরে থেকে কমান্ড চালানোর উপায়। Rexx এ এটি
address SYSTEM "command"দিয়ে করা হয়। - Operating System Interaction: Rexx অপারেটিং সিস্টেমের সঙ্গে যোগাযোগ স্থাপন করে সিস্টেম কমান্ড চালাতে, ফাইল ম্যানিপুলেট করতে এবং অন্যান্য সিস্টেম কার্যক্রম সম্পাদন করতে সক্ষম।
- Error Handling: বাহ্যিক কমান্ড চালানোর সময় ত্রুটি শনাক্ত করতে
rcব্যবহার করা হয়।
এই অপারেটরগুলি প্রোগ্রামের কার্যকারিতা বাড়াতে এবং সিস্টেমের সাথে কার্যকরীভাবে যোগাযোগ করতে সাহায্য করে।
Subprocesses এর মাধ্যমে কমান্ড এক্সিকিউট করা একটি প্রোগ্রামিং কৌশল, যেখানে একটি প্রোগ্রাম অন্যান্য প্রোগ্রাম বা কমান্ড চালানোর জন্য উপপ্রকিয়াগুলির (subprocess) ব্যবহার করে। Rexx-এ subprocesses এর মাধ্যমে কমান্ড এক্সিকিউট করার জন্য আমরা exect ফাংশন বা call কমান্ড ব্যবহার করতে পারি।
Rexx-এ Subprocesses এর মাধ্যমে কমান্ড এক্সিকিউট করা
Rexx-এ subprocesses ব্যবহার করে কমান্ড এক্সিকিউট করতে exect বা call ফাংশন ব্যবহার করা হয়। এটি মূলত অন্য একটি প্রোগ্রাম বা অপারেটিং সিস্টেমের কমান্ড রান করার জন্য ব্যবহৃত হয়। এই প্রক্রিয়া সাধারণত স্ক্রিপ্টিংয়ে খুবই উপকারী যেখানে প্রোগ্রাম থেকে বাইরের প্রোগ্রাম বা কমান্ড চালানো প্রয়োজন হয়।
1. exect ফাংশন ব্যবহার করে Subprocesses এক্সিকিউট করা
Rexx-এ exect ফাংশন ব্যবহার করে আপনি বাইরের সিস্টেম কমান্ড বা প্রোগ্রাম চালাতে পারেন। এই ফাংশনটি ব্যবহার করে, আপনি একটি সিস্টেম কমান্ড রান করতে পারেন এবং তার ফলাফল পেতে পারেন।
ব্যবহার:
/* বাইরের কমান্ড এক্সিকিউট করা */
result = exect('dir') /* Windows এর জন্য */
if result = 0 then
say "Command executed successfully"
else
say "Command execution failed"এখানে exect ফাংশনটি dir কমান্ড রান করে, যা Windows-এ বর্তমান ডিরেক্টরির ফাইল তালিকা প্রদর্শন করে। যদি কমান্ডটি সফলভাবে সম্পন্ন হয়, তবে এটি ০ রিটার্ন করবে, অন্যথায় এটি একটি ত্রুটি কোড রিটার্ন করবে।
2. call কমান্ড ব্যবহার করে Subprocesses এক্সিকিউট করা
Rexx-এ call কমান্ড দিয়ে অন্য একটি প্রোগ্রাম বা স্ক্রিপ্ট রান করা সম্ভব। আপনি call এর মাধ্যমে subprocesses রান করাতে পারেন। তবে এটি একটু ভিন্নভাবে কাজ করে, কারণ call মূলত একটি সাবরুটিন বা ফাংশন কল করার জন্য ব্যবহৃত হয়, যেখানে আপনি যে কোডটি রান করতে চান সেটি কল করেন।
ব্যবহার:
/* অন্য স্ক্রিপ্ট বা কমান্ড চালানো */
call runCommand, 'ls' /* Linux/Mac এর জন্য কমান্ড */
exit
runCommand: procedure
parse arg command
result = exect(command) /* বাইরের কমান্ড রান করা */
if result = 0 then
say "Command executed successfully"
else
say "Command execution failed"
returnএখানে runCommand একটি সাবরুটিন, যা একটি কমান্ড (যেমন, ls বা অন্যান্য সিস্টেম কমান্ড) এক্সিকিউট করে। call runCommand, 'ls' দিয়ে subprocess রান করা হয়, এবং সেখান থেকে exect ফাংশন ব্যবহার করে কমান্ডটি চালানো হয়।
3. Command Output সংগ্রহ করা
Rexx-এ subprocesses থেকে আউটপুট সংগ্রহ করার জন্য আপনি exect ফাংশনের আউটপুট ব্যবহার করতে পারেন। এটি কমান্ড এক্সিকিউট করার পর তার আউটপুট অথবা ফলাফল সংগ্রহ করে।
ব্যবহার:
/* Command output সংগ্রহ */
output = exect('dir') /* Windows এর জন্য কমান্ড */
if output = 0 then
say "Command executed successfully"
else
say "Command execution failed"
say "Command Output: " output /* কমান্ডের আউটপুট প্রদর্শন */এখানে output = exect('dir') দ্বারা কমান্ডের আউটপুট সংগ্রহ করা হচ্ছে এবং তারপরে তা স্ক্রিনে প্রদর্শন করা হচ্ছে।
4. Error Handling (ত্রুটি ব্যবস্থাপনা)
যখন subprocesses রান করানো হয়, তখন ত্রুটি হওয়ার সম্ভাবনা থাকে। Rexx-এ subprocess রান করার সময় সঠিক ত্রুটি ব্যবস্থাপনা খুবই গুরুত্বপূর্ণ।
ব্যবহার:
/* Error Handling সহ কমান্ড এক্সিকিউট */
result = exect('nonexistentcommand') /* একটি ভুল কমান্ড এক্সিকিউট করা */
if result = 0 then
say "Command executed successfully"
else
say "Error: Command execution failed with error code " resultএখানে nonexistentcommand একটি ভুল কমান্ড, যা রান করা হলে ত্রুটি কোড রিটার্ন করবে। if স্টেটমেন্টের মাধ্যমে এটি সঠিকভাবে চেক করা হচ্ছে এবং ত্রুটির জন্য একটি বার্তা প্রদর্শন করা হচ্ছে।
সারাংশ:
Rexx-এ subprocesses ব্যবহার করে বিভিন্ন সিস্টেম কমান্ড বা প্রোগ্রাম এক্সিকিউট করা খুবই সহজ। exect ফাংশন ব্যবহার করে সরাসরি সিস্টেম কমান্ড রান করা যায় এবং এর আউটপুট সংগ্রহ করা যায়। call কমান্ড দিয়ে subprocesses রান করানো যেতে পারে যেখানে একটি সাবরুটিনের মাধ্যমে কমান্ড এক্সিকিউট করা হয়। ত্রুটি ব্যবস্থাপনা (Error Handling) করার জন্য, Rexx-এ subprocesses এর মাধ্যমে রান করা কমান্ডের ফলাফল চেক করা উচিত।
Address এবং Command স্টেটমেন্টগুলি বিশেষভাবে Rexx প্রোগ্রামিং ভাষায় ব্যবহৃত হয়। এগুলি মূলত বিভিন্ন ধরনের কার্যক্রম পরিচালনা এবং বিভিন্ন অপারেটিং সিস্টেমের কমান্ড রান করার জন্য ব্যবহৃত হয়। আসুন, এগুলির সম্পর্কে বিস্তারিত আলোচনা করি।
Address Statement (অ্যাড্রেস স্টেটমেন্ট)
Address স্টেটমেন্টটি Rexx ভাষায় এক্সটার্নাল কমান্ড বা সিস্টেমে নির্দিষ্ট কোন অ্যাপ্লিকেশন বা প্রোগ্রাম চালানোর জন্য ব্যবহৃত হয়। এটি প্রধানত কমান্ড শেল বা অন্য প্রোগ্রাম (যেমন, UNIX বা Windows কমান্ড লাইন) থেকে আউটপুট গ্রহণের জন্য ব্যবহৃত হয়।
ব্যবহার:
Rexx-এ Address স্টেটমেন্ট সাধারণত সিস্টেমের কমান্ড চালাতে ব্যবহৃত হয়, যেমন শেল কমান্ড, অন্যান্য প্রোগ্রাম, বা স্ক্রিপ্ট রান করা। এই কমান্ডগুলো বিভিন্ন কাজ করতে পারে যেমন ফাইল পরিচালনা, টেক্সট ম্যানিপুলেশন, ইত্যাদি।
Syntax:
Address <System> <command><System>: এটি যেকোনো সিস্টেম কমান্ডের নাম বা প্রোগ্রামের নাম।<command>: এটি সেই সিস্টেমের জন্য চালানো কমান্ড।
Example:
UNIX Shell Command চালানো:
Address SYSTEM "ls -l"উপরের কোডটি
ls -lকমান্ডটি UNIX সিস্টেমে চালাবে এবং আউটপুট হিসেবে ফাইলের তালিকা দেখাবে।Windows Command চালানো:
Address SYSTEM "dir"এই কমান্ডটি Windows কমান্ড প্রম্পটে
dirকমান্ড চালাবে এবং বর্তমান ডিরেক্টরির ফাইল তালিকা দেখাবে।ফাইলের আউটপুট পরিবর্তন:
Address SYSTEM "echo Hello, Rexx! > output.txt"এই কমান্ডটি "Hello, Rexx!" টেক্সট ফাইল
output.txtএ লিখে দিবে।
Command Statement (কমান্ড স্টেটমেন্ট)
Command স্টেটমেন্টটি Rexx ভাষায় অন্তর্নির্মিত কমান্ড বা অপারেশন চালানোর জন্য ব্যবহৃত হয়। এটি কোনো বিশেষ কাজ বা অপারেশন সম্পাদন করতে ব্যবহৃত হয়। কমান্ড স্টেটমেন্টের মাধ্যমে Rexx-এর মধ্যে একাধিক নির্দিষ্ট কাজ একসঙ্গে সম্পাদন করা যেতে পারে।
ব্যবহার:
Rexx এর Command স্টেটমেন্ট সাধারণত এক্সটার্নাল সিস্টেমের বাইরে কোনো কমান্ড চালানোর জন্য ব্যবহৃত হয়। এটি এক্সটার্নাল শেল কমান্ড, যেমন UNIX বা Windows কমান্ড প্রম্পট থেকে কিছু নির্দিষ্ট কাজ করতে ব্যবহৃত হয়। কমান্ড স্টেটমেন্ট সিস্টেমের মধ্যে বিভিন্ন কাজ চালানোর জন্য ব্যবহার করা যেতে পারে।
Syntax:
command <command><command>: এটি যে কোনো সিস্টেম কমান্ড হতে পারে যেটি Rexx এর মধ্যে এক্সিকিউট করা হবে।
Example:
UNIX কমান্ড:
command "ps -aux"এই কমান্ডটি UNIX সিস্টেমে
ps -auxকমান্ড চালাবে, যা সকল চলমান প্রসেসের তালিকা প্রদর্শন করবে।Windows কমান্ড:
command "ipconfig"এটি Windows এর
ipconfigকমান্ড চালাবে, যা নেটওয়ার্ক কনফিগারেশন তথ্য প্রদর্শন করবে।File Manipulation:
command "rm oldfile.txt"এই কমান্ডটি UNIX সিস্টেমে
oldfile.txtফাইল মুছে ফেলবে।
Address এবং Command স্টেটমেন্টের মধ্যে পার্থক্য:
- Address:
- এটি মূলত সিস্টেমের সাথে যোগাযোগ করে এক্সটার্নাল কমান্ড রান করার জন্য ব্যবহৃত হয়।
- এটি সিস্টেমের আউটপুট গ্রহণ করতে সক্ষম এবং সেই আউটপুটে প্রোগ্রামের মধ্যে কাজ করতে পারে।
Addressস্টেটমেন্টের মাধ্যমে আমরা বিভিন্ন সিস্টেম কার্যক্রমের আউটপুট নিতে পারি এবং পরে এগুলি প্রোগ্রামে ব্যবহার করতে পারি।
- Command:
- এটি শুধু কমান্ড রান করার জন্য ব্যবহৃত হয়, তবে এটি আউটপুট সংগ্রহ করতে সক্ষম নয়।
- এটি শুধুমাত্র একটি নির্দিষ্ট কাজ সম্পাদন করতে ব্যবহৃত হয় (যেমন, ফাইল মুছে ফেলা, প্রক্রিয়া চালানো ইত্যাদি)।
Commandস্টেটমেন্টটি সাধারণত আউটপুটের প্রয়োজনীয়তা না থাকলে ব্যবহৃত হয়।
সারাংশ:
- Address Statement: সিস্টেম কমান্ড রান করতে ব্যবহৃত হয় এবং আউটপুট গ্রহণ করতে পারে।
- Command Statement: সিস্টেমের সাথে সংযোগের বাইরে নির্দিষ্ট কমান্ড কার্যকরী করতে ব্যবহৃত হয় এবং আউটপুট ব্যবহারের ক্ষমতা নেই।
এভাবে Address এবং Command স্টেটমেন্টগুলি Rexx ভাষায় সিস্টেমের সাথে যোগাযোগ এবং কমান্ড চালানোর জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে।
Rexx-এ subprocess ম্যানেজমেন্ট হল অন্য প্রোগ্রাম বা কমান্ডগুলিকে Rexx স্ক্রিপ্ট থেকে এক্সিকিউট করা এবং সেগুলোর আউটপুট বা ফলাফল নিয়ে কাজ করা। এটি আপনাকে অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার সুযোগ দেয়, যেমন কোন বাইরের কমান্ড রান করানো, আউটপুট ক্যাপচার করা, এবং অন্যান্য প্রোগ্রাম বা প্রসেসের সাথে কাজ করা।
এখানে কিছু সাধারণ subprocess ম্যানেজমেন্ট টেকনিক আলোচনা করা হলো:
১. Address কমান্ড দিয়ে বাইরের কমান্ড রান করানো
Rexx-এ বাইরের কমান্ড বা প্রোগ্রাম চালানোর জন্য Address কমান্ড ব্যবহৃত হয়। এটি ব্যবহারের মাধ্যমে আপনি সরাসরি অপারেটিং সিস্টেমে কমান্ড চালাতে পারেন।
সিনট্যাক্স:
Address System "command"Systemকিওয়ার্ড দিয়ে আপনি যে কোন শেল কমান্ড (যেমন CMD বা bash) রান করাতে পারেন।
উদাহরণ:
/* বাইরের কমান্ড রান করানো এবং ফলাফল প্রদর্শন */
Address System "echo Hello, World!"এটি echo কমান্ড চালাবে এবং "Hello, World!" আউটপুট হিসেবে দেখাবে।
২. বাইরের কমান্ডের আউটপুট ক্যাপচার করা
আপনি subprocess থেকে আউটপুটও ক্যাপচার করতে পারেন এবং সেই আউটপুটকে Rexx ভেরিয়েবলে সংরক্ষণ করতে পারেন। এই কাজের জন্য Address কমান্ডের সাথে queue ব্যবহার করা হয়।
সিনট্যাক্স:
Address System "command"
parse pull resultparse pullকমান্ডের মাধ্যমে subprocess এর আউটপুট একটি Rexx ভেরিয়েবলে (যেমনresult) নেওয়া হয়।
উদাহরণ:
/* 'date' কমান্ডের আউটপুট ক্যাপচার করা */
Address System "date"
parse pull result
say "Current date and time: " resultএখানে, date কমান্ডের আউটপুট result ভেরিয়েবলে সংরক্ষিত হচ্ছে এবং পরে তা প্রদর্শন করা হচ্ছে।
৩. বাইরের প্রোগ্রাম বা স্ক্রিপ্ট কল করা
Rexx দিয়ে অন্য Rexx স্ক্রিপ্ট বা বাইরের প্রোগ্রামও কল করা যায়। এটি মূলত সিস্টেমের সাথে আরো উন্নত ইন্টারঅ্যাকশন করার জন্য ব্যবহৃত হয়।
উদাহরণ:
/* অন্য Rexx স্ক্রিপ্ট কল করা */
Call ExternalScript
ExternalScript:
say "This is the subprocess running"এখানে, ExternalScript নামক অংশটি কল করা হচ্ছে এবং সেটি "This is the subprocess running" প্রিন্ট করবে।
৪. subprocess এর জন্য অপেক্ষা করা
Rexx-এ subprocess কমপ্লিট হওয়ার জন্য অপেক্ষা করতে হবে, এই প্রক্রিয়াটি সাধারণত রিটার্ন কোড বা প্রোসেস কন্ট্রোলের মাধ্যমে করা হয়। Rexx-এ কোনো built-in wait কমান্ড নেই, তবে আপনি subprocess এর সম্পন্ন হওয়ার পরে পরবর্তী কাজ শুরু করার জন্য return code চেক করতে পারেন।
উদাহরণ:
/* কমান্ড রান করানো এবং তার সম্পন্ন হওয়ার জন্য অপেক্ষা করা */
Address System "sleep 5" /* ৫ সেকেন্ডের জন্য থামবে */
say "Process complete"এখানে, sleep কমান্ডটি ৫ সেকেন্ডের জন্য থামবে এবং পরে "Process complete" মেসেজটি দেখাবে।
৫. ইনপুট/আউটপুট রিডিরেক্ট করা
Rexx subprocess এর ইনপুট বা আউটপুট রিডিরেক্ট করতে পারে। আপনি subprocess এ ডেটা পাঠাতে পারেন বা subprocess এর আউটপুট কোন ফাইলে বা অন্য জায়গায় পাঠাতে পারেন।
উদাহরণ (ইনপুট রিডিরেকশন):
/* ইনপুট রিডিরেক্ট করা */
Address System "echo 'input text' | grep 'text'"এখানে, echo কমান্ডের আউটপুট grep কমান্ডে পাস করা হচ্ছে।
উদাহরণ (আউটপুট রিডিরেকশন):
/* আউটপুট একটি ফাইলে রিডিরেক্ট করা */
Address System "echo 'Hello, World!' > output.txt"এটি echo কমান্ডের আউটপুটকে output.txt ফাইলে রিডিরেক্ট করবে।
৬. subprocess এর এরর হ্যান্ডলিং
যখন subprocess চলতে থাকে, তখন তার রিটার্ন কোড চেক করে আপনি বুঝতে পারবেন যে subprocess সফল হয়েছে কিনা বা কোন সমস্যা হয়েছে কিনা। Rexx-এ rc ভেরিয়েবল subprocess এর রিটার্ন কোড ধারণ করে।
উদাহরণ:
/* subprocess রান করানো এবং এরর চেক করা */
Address System "nonexistent_command"
if rc then
say "Error: Command failed with return code " rc
else
say "Command executed successfully"এখানে, rc ভেরিয়েবল চেক করা হচ্ছে যদি subprocess কমপ্লিট হতে না পারে, তাহলে এরর মেসেজ দেখাবে।
৭. Background Process চালানো (spawn)
যদি আপনি subprocess কে ব্যাকগ্রাউন্ডে চালাতে চান যাতে Rexx স্ক্রিপ্ট চলতে থাকে, তাহলে spawn ব্যবহার করতে পারেন।
উদাহরণ:
/* subprocess ব্যাকগ্রাউন্ডে চালানো */
Address System "nohup sleep 10 &"
say "Background process started"এটি sleep 10 কমান্ডটিকে ব্যাকগ্রাউন্ডে চালাবে এবং Rexx স্ক্রিপ্ট অবিলম্বে পরবর্তী পদক্ষেপে চলে যাবে।
৮. subprocess এর স্ট্যাটাস চেক করা
যদি আপনি একটি দীর্ঘ-running subprocess এর স্ট্যাটাস চেক করতে চান, তাহলে আপনি তার প্রসেস আইডি (PID) বা অন্য কোনও পদ্ধতি ব্যবহার করে এটি চেক করতে পারেন।
উদাহরণ:
/* প্রসেসের স্ট্যাটাস চেক করা */
Address System "ps -e | grep myprocess"
parse pull processStatus
if processStatus then
say "Process is still running"
else
say "Process has finished"এখানে, ps কমান্ড ব্যবহার করে আমরা চেক করছি যদি একটি প্রসেস চলমান থাকে।
সারাংশ:
Rexx-এ subprocess ম্যানেজমেন্ট বিভিন্ন ধরনের উপায়ে করা যায়, যেমন বাইরের কমান্ড রান করানো, আউটপুট ক্যাপচার করা, subprocess এর সাথে ইনপুট/আউটপুট রিডিরেক্ট করা, এরর হ্যান্ডলিং করা, ব্যাকগ্রাউন্ড প্রসেস চালানো এবং subprocess এর স্ট্যাটাস চেক করা। এই সমস্ত টেকনিক্স ব্যবহার করে আপনি আপনার Rexx স্ক্রিপ্টকে আরও শক্তিশালী ও ইন্টারঅ্যাকটিভ করতে পারেন, এবং সিস্টেমের অন্যান্য প্রোগ্রামের সাথে মিথস্ক্রিয়া করতে পারবেন।
Read more