নোহুপ আউটপুট ফাইলে লগ লিখছেন না


141

আমি ব্যাকগ্রাউন্ডে পাইথন স্ক্রিপ্ট চালাতে নিম্নলিখিত কমান্ডটি ব্যবহার করছি:

nohup ./cmd.py > cmd.log &

তবে দেখা যাচ্ছে যে নোহুপ লগ ফাইলে কিছু লিখছে না। সেমিডি.লগ তৈরি হলেও সর্বদা খালি থাকে। পাইথন স্ক্রিপ্টে, আমি স্ট্যান্ডার্ড আউটপুটে মুদ্রণের sys.stdout.writeপরিবর্তে ব্যবহার করছি print। আমি কি কিছু ভুল করছি?


আপনি কোন রূপ nohupব্যবহার করছেন? বিএসডি সংস্করণ nohup.outবর্তমান ডিরেক্টরিতে ডাকা একটি ফাইলকে লিখে (বা $HOME/nohup.outযদি বর্তমান ডিরেক্টরিটি লিখিত না হয়)। আউটপুট ফাইলের নাম পরিবর্তন করার কোনও উপায় আমি দেখতে পাচ্ছি না ...
ওয়ালং ul

@ ওয়ালং কেবল তখনই যদি স্টডআউট একটি টার্মিনাল হয়।
জন কুগেলম্যান

আমি কমান্ডটি পুনঃনির্দেশ ছাড়াই চেষ্টা করেছিলাম এবং এটি nohup.out ফাইলটি তৈরি করে নি। এটি কোন বৈকল্পিক তা আমি জানি না তবে এটি যদি সহায়তা করে তবে আমি সানোজ 5.10 এ আছি।

উত্তর:


103

দেখে মনে হচ্ছে আপনার পর্যায়ক্রমে স্টডআউট ফ্লাশ করা প্রয়োজন (উদাঃ sys.stdout.flush())। আমার পরীক্ষায় পাইথন printপ্রোগ্রামটি শেষ না হওয়া পর্যন্ত স্বয়ংক্রিয়ভাবে এটি করে না ।


17
অজগর পাশাপাশি অন্যান্য সি স্টডিও-ভিত্তিক প্রোগ্রামগুলি ইন্টারেক্টিভ ক্ষেত্রে লাইন-বাফারিং ব্যবহার করে (স্টাডআউটটি একটি টিটিআইয়ের সাথে সংযুক্ত থাকে) এবং কোনও ফাইলে পুনঃনির্দেশিত হলে ব্লক-বাফারিং। যদি python -uকাজ না করে; nohupএর নিজস্ব বাফারিং চালু থাকতে পারে।
jfs

12
@ জেফেসেবাস্টিয়ান আজকের হিসাবে, nohupআউটপুট বাফার করে না এবং python -uঠিক কাজ করে। (লোকেদের জন্য কেবল একটি আপডেট)
পাইজুসন

1
@ পিয়াস: nohupএকটি পসিক্স ইউটিলিটি যা বিভিন্ন প্ল্যাটফর্মগুলিতে বিভিন্ন প্রয়োগ হতে পারে। বিটিডাব্লু, পাইথন 3 আই / ও আর সি স্টিডিও-ভিত্তিক নয় তবে এর সাথে একই রকম বাফারিং আচরণ রয়েছে।
jfs

381

-uআউটপুট বাফারিং এড়াতে আপনি পতাকা সহ পাইথন চালাতে পারেন :

nohup python -u ./cmd.py > cmd.log &

12
ইহা ভাল! অনেক অনেক ধন্যবাদ :)
সাদজাদ

@ কমারডহোমার আমি অনুমান করি যে এটি আপনার প্রোগ্রামটি যে স্টাডাউট / স্টাডারের উত্পাদিত হবে তার উপর নির্ভর করে।
vz0

1
একটি যাদুমন্ত্র মত কাজ করে. আমিও মনে করি এটি সঠিক হিসাবে নির্বাচিত উত্তরটির চেয়ে উত্তম উত্তর। আপনি দয়া করে অন্যকে বিভ্রান্ত না করার জন্য এটি সঠিক হিসাবে চিহ্নিত করতে পারেন?
ওন্দ্রেজ বার্কার্ট

1
সতর্কতা: এটি সবসময় কাজ করে না । কেন জানি না। আপনি কি?
বাসজ

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত ... আমি যা চাইছিলাম তাই করল। ধন্যবাদ!
ক্রিংকার

42
  • আমার -u সাথে nohupকাজ করে ব্যবহার করে । ব্যবহার -uবাধ্য করা হবে stdout, stderrunbuffered হতে স্রোত বইবে। এটি স্টাডিনকে প্রভাবিত করবে না। " Nohup.out " ফাইলে সবকিছু সংরক্ষণ করা হবে। এটার মত-

    nohup python -u your_code.py &

    আপনি এটিকে আপনার ডিরেক্টরিতেও সংরক্ষণ করতে পারেন। এই পথে-

    nohup python -u your_code.py > your_directory/nohup.out &
  • এছাড়াও, আপনি ব্যবহার করতে পারেন PYTHONUNBUFFERED। যদি আপনি এটি একটি খালি খালি স্ট্রিংয়ে সেট করেন তবে এটি -uবিকল্পটির মতোই কাজ করবে । পাইথন কোড চালানোর আগে কমান্ডের নীচে এই রানটি ব্যবহার করার জন্য।

    export PYTHONUNBUFFERED=1

    অথবা

    export PYTHONUNBUFFERED=TRUE

পিএস- আমি পটভূমিতে এবং নির্ধারিত সম্পাদনের জিনিসগুলি চালানোর জন্য ক্রোন-জব এর মতো সরঞ্জামগুলি ব্যবহার করার পরামর্শ দেব।


@ Vz0 এর উত্তরের সাথে পার্থক্য কী?
Deqing

1
@ নির্ধারণ করা কোন পার্থক্য নেই।
ওভারকোড


2

পাইথন ৩.৩ এবং তারপরের উপরে মুদ্রণের জন্য একটি ফ্লাশ যুক্তি রয়েছে এবং এটিই আমার পক্ষে কাজ করেছে method

print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)

0

আমার একই রকম সমস্যা ছিল, তবে পাইথন প্রক্রিয়াটির সাথে সংযুক্ত নেই। আমি একটি স্ক্রিপ্ট চালাচ্ছিলাম যা একটি নোপআপ করেছিল এবং স্ক্রিপ্ট ক্রোন মাধ্যমে সময় সময় চলত।

আমি এর দ্বারা সমস্যার সমাধান করতে সক্ষম হয়েছি:

  1. স্টিডিন, স্টডআউট এবং স্টডারকে পুনর্নির্দেশ করা হচ্ছে
  2. স্ক্রিপ্টটি নোহুপের মাধ্যমে আহ্বান করা নিশ্চিত করা ব্যাকগ্রাউন্ডে অন্য কিছু চালিত হয়নি

পিএস: আমার স্ক্রিপ্টগুলি আরএসএইচএল-তে চলমান ksh এ লেখা ছিল

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