টার্মিনাল কমান্ডের "খারাপ" (0 নয়) রিটার্ন কোডটি চাপিয়ে দেবে?


8

পাইথনে আমার কাঠামো আছে, এবং পরীক্ষার উদ্দেশ্যে আমি মূলত একটি সাবপ্রসেস (ওরফে শেল কল) করতে চাই ... যা কেবল একটি আরসি দিয়ে ফিরে আসা উচিত! = 0 আমি কিছু অ-বিদ্যমান এক্সিকিউটেবলকে অনুরোধ করার চেষ্টা করেছি; বা "প্রস্থান 1" চালানোর জন্য; তবে এগুলি কোনও কারণে ফাইলনটফাউন্ডআররে অনুবাদ করা হয়েছে।

সুতরাং, আমি রিটার্ন কোডটি ট্রিগার করতে আর কী করতে পারি! = 0 (একটি "নির্ভরযোগ্য" উপায়ে; মানে কমান্ডটি হঠাৎ করে কোনও ভবিষ্যতের পয়েন্টে 0 ফিরে আসে না)।

আমি বাইনারি নামক প্রস্থানটি "সন্ধান" করার জন্য ভেবেছিলাম তবে ভাল:

> /usr/bin/env exit
/usr/bin/env: exit: No such file or directory

1
exit 1ভবিষ্যতের প্রুফ যাওয়ার উপায়। ফাইলনটফাউন্ডএরার অবশ্যই অন্য কোনও কারণে ঘটেছে।
জোস

যখন আমি "কোন প্রস্থান" করি ... কিছুই পাওয়া যায় না। সুতরাং আমি ধরে নিই যে "প্রস্থান" বাশ ফাংশন; আমি যখন সাব-প্রসেস কল করি তখন সম্ভবত পাওয়া যায় না ?!
ঘোস্টটিকেট

প্রযুক্তিগত নিটপিকিং: একটি শূন্য নয় এমন রিটার্ন কোড কোনও খারাপ পরিস্থিতির ইঙ্গিত হিসাবে নয় , কারণ আপনার প্রশ্নটি বোঝা যাচ্ছে। "0" এর অর্থ "ভুল কিছু নয়" এটি কেবল সম্মেলনের বিষয়। প্রকৃতপক্ষে কলিং প্রক্রিয়ায় ফিরে যেতে আপনার কাছে 8 টি বিট তথ্য রয়েছে information
জোস

@ জোস আমি এটি বুঝতে পারি। তবে মুল বক্তব্যটি হ'ল একটি আরসি! = 0 সাবপ্রসেস.সিচ_ক্যাল () থেকে একটি নির্দিষ্ট ব্যতিক্রমের দিকে নিয়ে যায়। আমি সঠিকভাবে পরিচালনা করা হয়েছে তা নিশ্চিত করার জন্য আমি এই শর্তটি প্রয়োগ করতে চাই (সত্য যে পরীক্ষাগুলিতে কোনও আরসি! = 0 পরিস্থিতি যেমন হওয়া উচিত তেমন পরিচালনা করা হয় তা নিশ্চিত করতে)।
ঘোস্টগেট 13

2
কীভাবে /bin/false?
স্টিল্ড্রাইভার

উত্তর:


18

যদি আপনি এমন কোনও সিস্টেম কমান্ড সন্ধান করছেন যা সর্বদা একটি শূন্য-বহির্গমন কোডটি দেয়, তবে /bin/falseমনে হয় এটি আপনার পক্ষে কার্যকর হবে। থেকে man false:

NAME
       false - do nothing, unsuccessfully

SYNOPSIS
       false [ignored command line arguments]
       false OPTION

DESCRIPTION
       Exit with a status code indicating failure.

না, তা হয় না। কমপক্ষে উবুন্টু 16.04.4 চলমান বাশে নিম্নলিখিত কমান্ড লাইনটি 5 এর পরিবর্তে 1 দেয়:/bin/false 5; echo $?
fviktor

@ ফাইভিক্টর এটি অ-শূন্য স্থিতি নিয়ে বেরিয়ে আসে5
সংশ্লেষ

তুমি ঠিক বলছো. আসল অ-শূন্য প্রস্থান কোডটি নিয়ন্ত্রণ করার কোনও উপায় নেই।
fviktor

7

আপনি কমান্ডটি দিয়ে একটি নতুন রিটার্ন কোড তৈরি করতে পারবেন bash -c "exit RETURNCODE", কোনও সংখ্যার সাথে "রিটার্নকোড" প্রতিস্থাপন করুন। দ্রষ্টব্য যে এটি একটি 8 বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যার (0 ... 255) দ্বারা (রিটার্নকোড 256 মোড) দ্বারা ছাঁটা হবে

এক্সিকিউটিভ সহ আপনি টার্মিনালের (!) ভিতরে সর্বশেষ শেল কমান্ডের রিটার্ন কোডটি পরীক্ষা করতে পারেন echo $?। "$?" ভেরিয়েবলটিতে সাম্প্রতিকতম রিটার্ন কোড থাকে এবং "প্রতিধ্বনি" এটি স্ট্যান্ডার্ড আউটপুটে প্রিন্ট করে।


+1 টি। মনে রাখবেন যে আপনি যদি এটি শেল স্ক্রিপ্টে লিখছেন, আপনি কেবল exit RETURNCODE( bash -cঅংশ ছাড়াই ) করতে পারবেন
ম্যাট ব্রাউন

0

আরও কিছু পরীক্ষার পরে, আমি দেখতে পেলাম যে আমার সমস্যাটি "লিনাক্স" পক্ষের নয়।

পাইথনের একটি মডিউল শ্লেক্স রয়েছে; যা "বিভাজন" কমান্ড স্ট্রিং ব্যবহার করা উচিত। shlex.split()"বাশ প্রস্থান 1" চালনার আউটপুট ব্যবহার করার জন্য যখন আমি আমার সাবপ্রসেস কলটি পরিবর্তন করেছি তখন আমার যা প্রয়োজন তা তা আমাকে দেয় gives

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.