পাওয়ারশেল এবং টি


10

কনসোল এবং একটি ফাইল উভয় আউটপুট দেখতে আমি এই আদেশটি ব্যবহার করি:

powershell -command "my_command_1 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"  
powershell -command "my_command_2 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"
# etc

এটি আমার প্রত্যাশার মতো কার্যকর নয় এবং আমার কিছু প্রশ্ন রয়েছে:

  1. আমি স্টাডারকে কীভাবে একটি ফাইলে পুনর্নির্দেশ করব?
  2. আউটপুটটি খুব অদ্ভুত কাজ করে। কিছু কমান্ডের জন্য টেক্সট মুদ্রিত হয় এবং কনসোল / ফাইল আপডেট হয় এর মধ্যে একটি বিশাল বিলম্ব হয়। কিছু অন্যান্য কমান্ডের জন্য আউটপুট আপডেট হয়ে যায় যখন পাঠ মুদ্রিত হয় (আমি টি ছাড়াই কমান্ডগুলি চালিত করি এবং এটি কী প্রিন্ট করা উচিত তা আমি জানি)। এই বিলম্ব এই টিটিকে প্রায় অকেজো করে তোলে - তবে যদি কিছু সমালোচনামূলক ত্রুটি মুদ্রণ করা হয় তবে আমাকে কমান্ডটি বন্ধ করা দরকার, তবে খুব দেরি না হওয়া পর্যন্ত আমি কিছুই দেখতে পাচ্ছি না?

    কিছু কমান্ডের জন্য সম্পূর্ণ কমান্ডটি সম্পন্ন হওয়ার পরে আউটপুট মুদ্রিত হয়।

  3. তদুপরি, কমান্ডটি যদি ব্যবহারকারীদের ইনপুট জিজ্ঞাসা করে, কনসোল / ফাইল আউটপুট ফাঁকা! এই কমান্ডের জন্য আমি জানি এটি কী প্রত্যাশা করে এবং অন্ধভাবে প্রয়োজনীয় পাঠ্য প্রিন্ট করে এবং এটি কাজ করে, তবে অন্যদের জন্য - কোনও আউটপুট না দিয়ে আমি কিছু অসীম হওয়ার জন্য অপেক্ষা করব যখন কমান্ডটি আমার ইনপুটটির জন্য অপেক্ষা করবে!

এই সমস্যার সমাধান আছে? যদি তা না হয় তবে পাওয়ারশেলের এই টি জিনিসটি সম্পূর্ণ অকেজো।


আমি বিশ্বাস করতে দ্বিধা বোধ করি যে কয়েক হাজার স্ক্রিপ্টে ব্যবহৃত একটি সরঞ্জাম কেবল "সম্পূর্ণ অকেজো" কারণ এটি আপনার নির্দিষ্ট প্রয়োজনীয়তা পূরণ করতে পারে না।
স্টিফেন জেনিংস

ঠিক আছে, আমি বোঝাতে চাইছি এটি বিশেষ ক্ষেত্রে এটি অকেজো: :) আমি খারাপ টিয়ের চেয়ে আরও ভাল থাকতাম, এ জাতীয় খারাপ সমস্যাগুলির চেয়ে।
রেস 1

উত্তর:


7
  1. My-Command 2>&1 | Tee-Object 'myfile.log'। দেখুন Get-Help about_Redirection
  2. আপনি ত্রুটি ফাঁদে আটকান করা উচিত, উপর নির্ভর না Ctrl+ + C। দেখুন Get-Help about_Try_Catch_Finally। আপনি যে আদেশটি বহিরাগত প্রোগ্রাম চালাচ্ছেন বা কোনও স্ক্রিপ্ট?
  3. আমি এটি বুঝতে পেরেছি, সাধারণত একটি স্ট্রিং অবজেক্টগুলি পাইপটি নীচে প্রেরণ করা হয় না যতক্ষণ না একটি প্রান্ত-অব-লাইন চরিত্রটি পৌঁছে যায়। কারণটি বেশ সহজ: এটি যদি এটি না করে থাকে তবে আংশিক (পড়ুন: অসম্পূর্ণ) স্ট্রিংগুলি পাইপের নীচে চলে যাবে। Teeআংশিক স্ট্রিং সূক্ষ্মভাবে পরিচালনা করতে পারে, তবে অন্যান্য সেমিডলেটগুলি অবশ্যই পছন্দ করবে না ForEach-Objectবা Select-Objectকরবে না। নোটটিতে Get-Contentএকটি বিশেষ স্যুইচ রয়েছে -ReadCountযা কিছুটা এই আচরণকে ওভাররাইড করে এবং এটি Select-Object -Skip/-First/-Last/-Uniqueপাইপ থেকে আরও কমান্ডের সাথে গুরুতরভাবে গণ্ডগোল করে।

এটি খুব ভাল হতে পারে যে আপনি যে বহিরাগত প্রোগ্রামগুলি চালাচ্ছেন সেগুলি পাওয়ারশেল আশা করছে যে কনভেনশনগুলি মানছে না। Teeউদাহরণস্বরূপ, যথাযথভাবে ডাকা হয় Tee-Object, যা আপনাকে যে ধরণের জিনিসগুলির সাথে কাজ করা ভাল তা জানানো উচিত। সেক্ষেত্রে আপনি জিএনইউ উইন 32 ইউটিলেস বা এমএসওয়াইএসtee.exe থেকে পেতে আরও লাইন ধরে থাকতে পারেন যা সামগ্রী অবিলম্বে ফরোয়ার্ড করার জন্য ডিজাইন করা হয়েছে।


1. ধন্যবাদ; 2. সঠিক, আমি কিছু সমালোচনামূলক অপ্রত্যাশিত পরিস্থিতি বোঝাতে চাইছি; ৩. আমি অসম্পূর্ণ স্ট্রিংয়ের জন্য দোষী কি তা বুঝতে পারি না: শেষ পর্যন্ত আমার কমান্ডগুলি পাইথন স্ক্রিপ্টগুলি চালায় - এটি ফ্যাব্রিক কমান্ড। আমি উইন্ডোজের জন্য সংকলিত লিনাক্স ইউটিস থেকে tee.exe ব্যবহার করার চেষ্টা করেছি - একই ফলাফল, কিছু ক্ষেত্রে আউটপুট নেই। তার মানে কি আমার কংক্রিটের কনফিগারেশন এবং কংক্রিট স্ক্রিপ্টগুলি টি উপযোগীদের সাথে মোটেই ভাল কাজ করবে না? ধন্যবাদ.
রেস 1

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