শেল / দোভাষীদের এভাবে ইনপুট পাঠানো খুব সমস্যা-ঝুঁকির এবং কোনও নির্ভরযোগ্য উপায়ে কাজ করা খুব কঠিন।
সঠিক উপায় হ'ল সকেটগুলি ব্যবহার করা, এ কারণেই সেগুলি আবিষ্কার করা হয়েছিল, আপনি কমান্ড লাইনে এটি ব্যবহার করতে ncat ncবা socatএকটি সাধারণ সকেটে অজগর প্রক্রিয়াটি আবদ্ধ করতে পারেন । অথবা একটি সাধারণ অজগর অ্যাপ্লিকেশন লিখুন যা বন্দরে আবদ্ধ হয় এবং সকেটে ব্যাখ্যা করার জন্য আদেশগুলি শোনায়।
সকেট স্থানীয় হতে পারে এবং কোনও ওয়েব ইন্টারফেসের সংস্পর্শে আসে না।
সমস্যাটি হ'ল আপনি যদি pythonকমান্ড লাইন থেকে শুরু করেন তবে এটি সাধারণত আপনার শেলের সাথে সংযুক্ত থাকে যা টার্মিনালের সাথে সংযুক্ত থাকে, বাস্তবে আমরা দেখতে পারি
$ ls -al /proc/PID/fd
lrwxrwxrwx 1 USER GROUP 0 Aug 1 00:00 0 -> /dev/pty1
সুতরাং যখন আপনি stdinঅজগর সম্পর্কে লিখেন, আপনি আসলে ptyপিচিউডো-টার্মিনালে লিখছেন যা কোনও কার্নেল ডিভাইস, কোনও সাধারণ ফাইল নয়। এটি ব্যবহার করে ioctlনা readএবং writeতাই আপনি আপনার স্ক্রিনে আউটপুট দেখতে পাবেন তবে এটি তৈরি প্রক্রিয়াতে প্রেরণ করা হবে না ( python)
আপনি যা চেষ্টা করছেন তার অনুলিপি করার একটি উপায় হ'ল একটি fifoবা এর সাথে named pipe।
# make pipe
$ mkfifo python_i.pipe
# start python interactive with pipe input
# Will print to pty output unless redirected
$ python -i < python_i.pipe &
# keep pipe open
$ sleep infinity > python_i.pipe &
# interact with the interpreter
$ echo "print \"hello\"" >> python_i.pipe
আপনি screenকেবল ইনপুট জন্য ব্যবহার করতে পারেন
# start screen
$ screen -dmS python python
# send command to input
$ screen -S python -X 'print \"hello\"'
# view output
$ screen -S python -x