আমার কাছে একটি অজগর স্ক্রিপ্ট রয়েছে যা অসংখ্য বিচ্ছিন্ন স্ক্রিন সেশনগুলির উপর নজর রাখে এবং প্রতিটি থেকে আউটপুট ক্যাপচার করে (যখন ফ্রি, টপ-বিএন 2, আইওস্ট্যাটের মতো ইউজুয়ালাইজেশন কমান্ডগুলি পর্যায়ক্রমে ' স্টাফ'- এর মাধ্যমে প্রেরণ করা হয়)।
কোনও ফাইলে পুনর্নির্দেশের পরিবর্তে এবং এইভাবে, বিযুক্ত স্ক্রিন সেশন অনুযায়ী কমপক্ষে একটি ফাইল পরিচালনা করা ... আমি আমার পিতামাতার অধিবেশনটি যেটি tty / pts ব্যবহার করছে তা কেবল পুনঃনির্দেশ করি।
পদক্ষেপ # 1: বিচ্ছিন্ন মোডে একটি নতুন স্ক্রিন সেশন (একটি মানব পাঠযোগ্য নাম সহ) শুরু করুন।
$ screen -dmS chad
পদক্ষেপ # 2: আপনার আদেশগুলি প্রেরণ করুন (আমি 'আনমে -আর' সহ 'ফ্রি-জি' কমান্ডটি ব্যবহার করব)। আপনি যে উইন্ডোটি ব্যবহার করতে চান তা নির্দিষ্ট করে দেওয়া গুরুত্বপূর্ণ (আমাদের ক্ষেত্রে, প্রথম এবং একমাত্র উইন্ডো) -p দিয়ে।
$ screen -r chad -p0 -X stuff "free -g; uname -r"
পদক্ষেপ # 3: উপরের পদক্ষেপটি কেবল কমান্ড পাঠ্য প্রেরণ করে। শেলটি আমাদের কমান্ডটি কার্যকর করতে আমাদের এই বিযুক্ত স্ক্রিন সেশনে একটি ক্যারেজ রিটার্নও পাঠাতে হবে। ASCII অক্ষর 015 হল বেশিরভাগ * নিক্স সিস্টেমে একটি ক্যারেজ রিটার্ন।
$ screen -r chad -p0 -X eval "stuff \015"
পদক্ষেপ # 4: আমাদের বিচ্ছিন্ন স্ক্রিন সেশনের আউটপুটটিকে আমাদের বর্তমান tty / pts এ পুনঃনির্দেশ করুন:
$ screen -r chad -p0 -X hardcopy $(tty)
পদক্ষেপ # 4 এর আউটপুট এরকম কিছু দেখবে:
$ free -g; uname -r
total used free shared buffers cached
Mem: 7 1 6 0 0 0
-/+ buffers/cache: 0 7
Swap: 1 0 1
2.6.32-358.el6.x86_64
যদিও এটি কিছুটা জড়িত বলে মনে হচ্ছে, প্রক্রিয়াটি সহজেই লিপিযোগ্য। অজগর দিয়ে, আমি পদক্ষেপ # 4 এর আউটপুটকে বিশ্লেষণ করতে পারি এবং কেবল আমার যত্ন নেওয়া ডেটা ক্যাপচার করতে পারি।
আইপি বিশদ দখল করার মতো একটি সাধারণ দৃশ্যের চয়ন করে, আমি উপরের ধারণাগুলি প্রদর্শনের জন্য একটি উদাহরণ স্ক্রিপ্ট লিখেছিলাম। আপনি উপযুক্ত হিসাবে প্রতিস্থাপন এবং টিঙ্কার নির্দ্বিধায়।
বিচ্ছিন্ন স্ক্রিন সেশন থেকে আইপি বিশদ পেতে পাইথন স্ক্রিপ্ট উদাহরণ:
#!/usr/bin/python
import pexpect, time
#spawn a new bash session
session = pexpect.spawn('/bin/bash')
#send screen commands
session.sendline('screen -dmS netIP')
session.sendline('screen -r netIP -p0 -X stuff "ifconfig eth0 | grep -v eth0 | head -1"')
session.sendline('screen -r netIP -p0 -X eval "stuff \\015"')
#give the command a chance to execute before reading the output of our detached screen
time.sleep(0.1)
#use the output of the uname command as our string to expect
session.sendline('screen -r netIP -p0 -X hardcopy $(tty); $(uname)')
session.expect('Linux')
#parse the output - only concerned with the 'inet' line
output = session.before.split('\n')
for o in output:
if 'inet' in o:
print o
#kill the screen
session.sendline('screen -r netIP -p0 -X quit')
time.sleep(0.1)
session.close()
কার্যক্রমে উপরে স্ক্রিপ্ট:
$ python screen-output-test.py
inet addr:192.168.1.201 Bcast:192.168.1.255 Mask:255.255.255.0
screen
? এটি কি শিশু প্রসেসগুলির জন্য তৈরি হয় না?