স্ট্যান্ডারকে কোন আউটপুট প্রেরণ করা হয়েছিল তা তাত্ক্ষণিকভাবে বলুন


8

কোনও কাজ স্বয়ংক্রিয় করার সময়, এটি নিজে নিজে পরীক্ষা করা বুদ্ধিমানের কাজ। এটি সহায়ক হবে, যদিও স্ট্যাডারের কাছে যাওয়া কোনও ডেটা যদি তাত্ক্ষণিকভাবে সনাক্তযোগ্য হয় এবং স্টাডাউটে যাওয়া ডেটা থেকে পৃথকযোগ্য এবং সমস্ত আউটপুট একসাথে থাকে তাই ঘটনাগুলির ক্রম কী তা স্পষ্ট।

একটি শেষ টাচ যা দুর্দান্ত লাগবে তা হল, প্রোগ্রামের প্রস্থানের সময়, এটি তার রিটার্ন কোডটি মুদ্রণ করে।

এই সমস্ত জিনিস স্বয়ংক্রিয়করণে সহায়তা করবে। হ্যাঁ, কোনও প্রোগ্রাম শেষ হলে আমি রিটার্ন কোডটি প্রতিধ্বনিত করতে পারি এবং হ্যাঁ, আমি স্ট্যাডআউট এবং স্টডারকে পুনঃনির্দেশ করতে পারি; আমি সত্যিই এটির কিছু শেল, স্ক্রিপ্ট বা সহজেই ব্যবহারযোগ্য পুনর্নির্দেশকটি পছন্দ করতে চাই যা কালোতে স্টডআউট দেখায়, স্টারডারটি এটি লাল রঙের সাথে ইন্টারলিভ করে দেখায় এবং শেষে প্রস্থান কোডটি প্রিন্ট করে।

এমন জন্তু আছে কি? [যদি এটি গুরুত্বপূর্ণ হয় তবে আমি ম্যাক ওএস এক্সে ব্যাশ ৩.২ ব্যবহার করছি]


আপডেট : দুঃখিত আমি এই তাকিয়ে কয়েক মাস হয়ে গেছে। আমি একটি সাধারণ পরীক্ষার স্ক্রিপ্ট নিয়ে এসেছি:

#!/usr/bin/env python
import sys

print "this is stdout"
print >> sys.stderr, "this is stderr"
print "this is stdout again"

আমার পরীক্ষায় (এবং সম্ভবত উপায়গুলি বাফার করার কারণে), স্টাডাউট থেকে আরএসই এবং হিলাইট এবং তারপরে স্ট্ডার থেকে সমস্ত কিছু প্রদর্শিত হয়। ফিফো পদ্ধতিটি অর্ডারটি ঠিকমতো পায় তবে স্ট্যাডার লাইনের পরে সমস্ত কিছু কলরাইজ করা দেখা যায়। ind আমার স্টাডিন এবং স্ট্ডার লাইন সম্পর্কে অভিযোগ করেছিল এবং তারপরে স্ট্ডার থেকে আউটপুটটি শেষ রাখে।

এই সমাধানগুলির বেশিরভাগটি কার্যক্ষম হয়, কারণ কেবল স্টেডারের কাছে যাওয়ার জন্য এটি কেবল শেষ আউটপুটটির পক্ষে সাধারণ নয়, তবুও কিছুটা ভাল কাজ করা ভাল লাগবে।


আপনি যদি আমার মতো অলস হন (বা ঘায়ে আঙ্গুল দিয়েছেন) তবে আপনি নীচের সমাধানগুলি (যেমন।
পক্ষপাতিত্ব করুন

উত্তর:


3

আপনি স্টার্ডার্ডগুলিও দেখতে পারেন: https://github.com/sickill/stderred


দুর্ভাগ্যক্রমে, স্টার্ডার্ড ওপির মতো ম্যাক ব্যবহারকারীদের জন্য "উন্মুক্ত" এবং "এমভিআইএম" বিরতি দেয়।
AlcubierreDrive

এটি খুব সুন্দরভাবে কাজ করে, এবং কাজ করার পদ্ধতিটির কারণে সঠিক ফ্যাশনে আউটপুট অর্ডার পায়। এটি একবার সেট আপ করুন এবং এটি আপনার প্রোফাইলে চালু করুন এবং যখনই স্ট্যাডার লিখিত হয় আপনি লাল বার্তা পান।
ক্লিনটন ব্ল্যাকমোর

1
@ জোনরড্রিগুয়েজ, আমার কাছে এটি "ওপেন" কমান্ডের সাথে সমস্যাটি স্থির হয়েছে বলে মনে হচ্ছে ।
ক্লিনটন ব্ল্যাকমোর

9

আমি সবেমাত্র FIFO- এর সাথে জড়িত একটি ক্রেজি পদ্ধতি তৈরি করেছি।

$ mkfifo foo
$ grep --color . foo &
$ your_command 2>foo

আপনি যদি স্ট্ডার আউটপুট পৃথক করতে চান তবে আপনি দুটি পৃথক শেল খুলতে পারেন এবং grep --color . fooএকটিতে চালিয়ে " " চালাতে পারেন &, তারপরে অন্যটিতে কমান্ড চালান (এখনও সাথে রয়েছে 2>foo)। আপনি grepএকটিতে স্ট্যাডার পাবেন এবং মূলটিতে স্টাডআউট পাবেন ।

এটি কাজ করে কারণ স্ট্যাডার আউটপুটটি ফিফোর মাধ্যমে রূপান্তরিত হয়েছে grep --color, যার ডিফল্ট রঙ লাল (কমপক্ষে এটি আমার জন্য)। আপনি যখন সম্পন্ন করবেন, কেবলমাত্র rmফিফো ( rm foo)।

ক্যাভ্যাট : আমি সত্যই নিশ্চিত নই যে এটি কীভাবে আউটপুট ক্রম পরিচালনা করবে, আপনাকে এটি পরীক্ষা করে দেখতে হবে।


বেশ সুন্দর lick
ক্লিনটন ব্ল্যাকমোর

7

হ্যাঁ, এটি সম্ভব। কার্যকারী উদাহরণের জন্য এই সাইটে "STDERR লাল করুন" বিভাগটি দেখুন Look

মূল কোডটি এটি

# Red STDERR
# rse <command string>
function rse()
{
    # We need to wrap each phrase of the command in quotes to preserve arguments that contain whitespace
    # Execute the command, swap STDOUT and STDERR, colour STDOUT, swap back
    ((eval $(for phrase in "$@"; do echo -n "'$phrase' "; done)) 3>&1 1>&2 2>&3 | sed -e "s/^\(.*\)$/$(echo -en \\033)[31;1m\1$(echo -en \\033)[0m/") 3>&1 1>&2 2>&3
}

একটি সংক্ষেপে ব্যাখ্যা ফাংশন নিজেই দেওয়া হয়। কি করে, stdout- এ এবং stderr সরাতে সম্পর্কে তাই sed 1 stderr পায়, এটা রং, এবং তারপর অদলবদল এটি ফিরিয়ে। ফাইল স্ট্রিম 3 টি এখানে একটি অস্থায়ী পরিবর্তনশীল হিসাবে ভাবেন।

কলটি বেশ সহজ

rse commands

তবে, কিছু অনুরোধ প্রত্যাশার মতো কাজ করবে না; সাবধানতা লিঙ্কযুক্ত পৃষ্ঠায় সরবরাহ করা হয়।

বিটিডব্লু, আমি মনে করি ফর্মের সমাধান নিয়ে আসাও সম্ভব

commands | rse 

যেখানে আরএসপি আউটপুটটিকে রঙিন করবে।

আমি এই ইলিট প্রকল্পটি এটি করে বলে মনে করি। আমি এটি চেষ্টা করে দেখিনি, তবে এটি আপনি যা খুঁজছেন তা হতে পারে।

হিলাইট একটি ছোট্ট ইউটিলিটি যা আপনার নির্দিষ্ট কমান্ডটি কার্যকর করে, স্টাডারে মুদ্রিত যে কোনও কিছু হাইলাইট করে। এটি মূলত বিল্ডগুলির সাথে ব্যবহারের জন্য, সতর্কতা এবং ত্রুটিগুলি ঘা ক্লিচের মতো তৈরি করার জন্য তৈরি করা হয়েছে।

অন্যান্য সম্পর্কিত প্রকল্প:


আরএসই এবং ইলাইট আমি যা চাই তার খুব কাছে।
ক্লিনটন ব্ল্যাকমোর

1

আর একটি প্রোগ্রাম হ'ল:

http: // www.habets.pp.se/synscan/program.php?prog=ind (আপনাকে হাইপারলিংক নিজেই একত্রিত করতে হবে, প্রতি উত্তরে একাধিকের জন্য আমার পর্যাপ্ত পয়েন্ট নেই)। সেখানে একটি স্ক্রিনশট এমনকি একটি স্ক্রিনকাস্ট রয়েছে।

এটি একটি প্রাইসিতে সাব-প্রসেস চালায় যা অন্যরা সম্ভবত তা করে না। অর্ডার সম্পর্কিত বিষয়টি (এটি প্রায়শই ঘটে) এটি বিষয়টি বিবেচনা করতে পারে, যেহেতু স্টার্ডার তাত্ক্ষণিকভাবে টার্মিনালগুলিতে ফ্লাশ করা হয় এবং স্টাডিআউট সম্পূর্ণরূপে বাফার হয় যখন এটি কোনও টিটি নয়।

সম্পূর্ণ ব্যাখ্যার জন্য এটি দেখুন: http://blog.habets.pp.se/2008/06/Buffering-in-pines

এছাড়াও, ইন্ড ইন্টারেক্টিভ প্রোগ্রাম এবং নিয়ন্ত্রণের অক্ষরগুলির সাথে কাজ করে। "Ind bash -i" দিয়ে শুরু করার সাথে বাশ ঠিক স্বাভাবিকের মতো কাজ করে।

এটি Ctrl-P et.al সংরক্ষণ করার সময় আপনাকে রঙ দেওয়ার জন্য কাজ করতে পারে

ind -P $(echo -ne '\033[31;1m') -p $(echo -ne '\033[0m') bash -i

1

স্ট্যাডার আউটপুট হাইলাইট করার জন্য এখানে প্রচুর প্রতিক্রিয়া রয়েছে। আমি কেবল একটি খুব সহজ যোগ করতে পারি - এক সারিতে, আপনি কমান্ডটি সংযুক্ত করেছেন:

command 2> >(while read line; do echo -e "\e[01;31m$line\e[0m"; done)

তবে আপনাকে প্রতিটি সময় কমান্ডের পরে এটি যুক্ত করতে হবে।

আমি, ব্যক্তিগতভাবে @ নাগুল দ্বারা উল্লিখিত সম্ভাবনার মতো, আরএসসি ফাংশনটি বাশার্কে যুক্ত করেছি।

তবে আমি প্রস্থান কোড মুদ্রণের জন্য সমাধানটি যুক্ত করতে চাই। আপনি আপনার ব্যাশ প্রম্পট সারিটির শুরুতে এই মানটি যুক্ত করতে পারেন:

hostname$ command
  Some error occurred. Returned exit code.
EC hostname$

ইসি হ'ল কমান্ডের প্রস্থান কোড।

আমি এটি সেট করে রেখেছি, যখন প্রস্থান কোড 0 হয়, এটি প্রিন্ট করা হবে না, তবে পরবর্তী কোনও প্রিন্টের আগে লাল বর্ণের আগে মুদ্রণ করা হবে।

পুরো কৌশলটি ~ / .bashrc এ সম্পন্ন হয়েছে:

my_prompt() {
 EXITSTATUS="$?"
 RED="\[\033[1;31m\]"
 OFF="\[\033[m\]"

PROMPT="${debian_chroot:+($debian_chroot)}\h \$ "

if [ "${EXITSTATUS}" -eq 0 ]; then
   PS1="${PROMPT}"
else
   PS1="${RED}$EXITSTATUS${OFF} ${PROMPT}"
fi
}

PROMPT_COMMAND=my_prompt

প্রম্পট লাইনটি ডিফল্টরূপে PS1 ভেরিয়েবল দ্বারা সংজ্ঞায়িত হয়। আপনার এখানে যা আছে তা ভেরিয়েবল PROMPT এ অনুলিপি করুন এবং তারপরে প্রস্থান কোডের সাথে বা ছাড়াই PS1 ভেরিয়েবলটি তৈরি করুন।

বাশ প্রম্পটে PS1 ভেরিয়েবলের তথ্য প্রদর্শন করবে।


আমি ঠিক তাই খুঁজছিলাম, ধন্যবাদ!
ডাইলন

1

আছে annotate-outputইউটিলিটি ( devscriptsডেবিয়ান প্যাকেজ), আপনি যদি রং ছাড়াই এটি করতে চান

$ annotate-output /tmp/test.py    
14:24:57 I: Started /tmp/test.py
14:24:57 E: this is stderr
14:24:57 O: this is stdout
14:24:57 O: this is stdout again
14:24:57 I: Finished with exitcode 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.