पॉवरशेल और टी


9

मैं इस कमांड का उपयोग कंसोल और फाइल दोनों में आउटपुट देखने के लिए करता हूं:

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. इसके अलावा, भले ही कमांड उपयोगकर्ता इनपुट पूछता है, कंसोल / फ़ाइल आउटपुट खाली है! उस कमांड के लिए मुझे पता है कि यह क्या अपेक्षा करता है और नेत्रहीन प्रिंट को पाठ की आवश्यकता है और यह काम करता है, लेकिन दूसरों के लिए - बिना किसी आउटपुट के मैं कुछ अनन्तता से होने की प्रतीक्षा करूंगा, जबकि कमांड मेरे इनपुट का इंतजार करेगा!

क्या इन मुद्दों के समाधान हैं? यदि नहीं, तो PowerShell में यह टी चीज़ पूरी तरह से बेकार है।


मुझे यह विश्वास करने में संकोच हो रहा है कि हजारों लिपियों में प्रयुक्त एक उपकरण "पूरी तरह से बेकार" है, क्योंकि यह आपकी विशिष्ट आवश्यकताओं को पूरा नहीं कर सकता है।
स्टीफन जेनिंग्स

ठीक है, मेरा मतलब है कि इस विशेष मामले में यह बेकार है :) मैं बेहतर अकेला छोड़ दूँगा, इस तरह के बुरे मुद्दे होंगे।
रेस १

जवाबों:


6
  1. My-Command 2>&1 | Tee-Object 'myfile.log'। देख लो Get-Help about_Redirection
  2. आपको त्रुटियों को फंसाना चाहिए, न कि भरोसा करना Ctrl+ C। देख लो Get-Help about_Try_Catch_Finally। क्या वह कमांड जो आप एक बाहरी प्रोग्राम या स्क्रिप्ट पर चला रहे हैं?
  3. जैसा कि मैं इसे समझता हूं, आमतौर पर स्ट्रिंग ऑब्जेक्ट्स को पाइप के नीचे नहीं भेजा जाता है जब तक कि अंतिम-पंक्ति वर्ण तक नहीं पहुंच जाता है। कारण काफी सरल है: यदि यह ऐसा नहीं करता है, तो आंशिक (पढ़ें: अपूर्ण) तार पाइप के नीचे चले जाएंगे। Teeआंशिक तारों को ठीक से संभाल सकता है, लेकिन अन्य cmdlets जैसे ForEach-Objectया Select-Objectनिश्चित रूप से नहीं होगा। ध्यान दें कि Get-Contentएक विशेष स्विच है -ReadCountजो कुछ हद तक इस व्यवहार को ओवरराइड करता है, और यह Select-Object -Skip/-First/-Last/-Uniqueपाइप के नीचे एक कमांड के साथ गंभीरता से गड़बड़ करेगा ।

यह बहुत अच्छी तरह से हो सकता है कि आपके द्वारा चलाए जा रहे बाहरी कार्यक्रम उन सम्मेलनों को मानने वाले नहीं हैं जो पावरशेल उम्मीद कर रहे हैं। Tee, उदाहरण के लिए, ठीक से कहा जाता है Tee-Object, जो आपको उन चीजों के प्रकारों को बताना चाहिए जिनके साथ काम करना अच्छा है। उस स्थिति में, आप GNU Win32 Utils या MSYStee.exe से प्राप्त करने के लिए लाइन के साथ हो सकते हैं जो तुरंत अग्रेषण सामग्री के लिए डिज़ाइन किए गए हैं।


1. धन्यवाद; 2. सही, मेरा मतलब कुछ महत्वपूर्ण अप्रत्याशित स्थितियों से था; 3. मुझे समझ में नहीं आता कि अधूरे तारों के लिए दोषी क्या है :) आखिरकार मेरे आदेश पायथन लिपियों को चलाते हैं - यह कपड़े के आदेश हैं। मैंने विंडोज़ के लिए संकलित लिनेक्स बर्तनों से tee.exe का उपयोग करने की कोशिश की - वही परिणाम, कुछ मामलों में कोई आउटपुट नहीं। इसका मतलब यह है कि मेरे ठोस विन्यास और ठोस स्क्रिप्ट टी उपयोगिताओं के साथ अच्छी तरह से काम नहीं करेगा? धन्यवाद।
दौड़ 1

यह मुझे लगता है जैसे अजगर स्क्रिप्ट गलत व्यवहार कर रही है।
बेकन बिट्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.