লিনাক্স টি পাইথন নিয়ে কাজ করছে না?


103

আমি একটি পাইথন স্ক্রিপ্ট তৈরি করেছি যা একটি ওয়েব সার্ভারের সাথে অসীম লুপ ব্যবহার করে যোগাযোগ করে। আমি প্রতিটি যোগাযোগের ডেটা কোনও ফাইলে লগ করতে এবং একই সাথে টার্মিনাল থেকে তাদের নিরীক্ষণ করতে চাই। সুতরাং আমি এইভাবে টি কমান্ড ব্যবহার করেছি।

python client.py | tee logfile

তবে আমি টার্মিনাল বা লগফাইলে কিছুই পাইনি। পাইথন স্ক্রিপ্টটি ঠিকঠাক কাজ করছে। এখানে কি হচ্ছে? আমি কিছু অনুপস্থিত করছি?

কিছু পরামর্শ প্রশংসা করা হবে। তুমাকে অগ্রিম ধন্যবাদ.


4
পাইফ এবং টার্মিনালের জন্য বাফারিং আলাদা আচরণ করে। আপনি sys.stdout.flush()যখনই কোনও লাইন লগইন করেছেন তখন আপনার স্ক্রিপ্ট থেকে স্পষ্ট করার দরকার হতে পারে ।
লুকাশ গ্রাফ

অন্য কোন উপায়ে unbuffered আউটপুট দেখতে আরম্ভ করার জন্য stackoverflow.com/q/107705/1328439
দিমিত্রি Chubarov

উত্তর:


180

থেকে man python:

   -u     Force stdin, stdout and stderr to  be  totally  unbuffered.   On  systems
          where it matters, also put stdin, stdout and stderr in binary mode.  Note
          that there is internal buffering in xreadlines(), readlines()  and  file-
          object  iterators  ("for  line  in sys.stdin") which is not influenced by
          this option.  To work around this, you will want to use  "sys.stdin.read‐
          line()" inside a "while 1:" loop.

সুতরাং আপনি যা করতে পারেন তা হ'ল:

/usr/bin/python -u client.py >> logfile 2>&1

বা ব্যবহার tee:

python -u client.py | tee logfile

4
একটি বিকল্প ব্যবহার করা হবে script, যা বাফারিংকে অক্ষম করে এবং অতিরিক্তভাবে নিয়ন্ত্রণ সিক্যুয়েন্সগুলি ( C-a, কার্সার কীগুলি ইত্যাদি) কাজ করে: স্ট্যাকওভারফ্লো . com / a / 39269661 / 15690
নীল রঙের

চমৎকার! এটি রাস্পবিয়ান জেসির সাথে সজ্জিত আমার রাস্পবেরি পাই 3 তে পাইথন 3 এও কাজ করেছে: পাইথন 3-ইউ ক্লায়েন্ট.পি | টি লগফিল
এন্টোনিনো

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

অন্য নোট: python -u client.py | tee >> logfileকাজ করবে না। এই >>ফাইলটিতে বাফার লেখার আরেকটি কেস প্রবর্তন করবে। এটিই tee -aসমাধান করে।
টানিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.