শেল / দোভাষীদের এভাবে ইনপুট পাঠানো খুব সমস্যা-ঝুঁকির এবং কোনও নির্ভরযোগ্য উপায়ে কাজ করা খুব কঠিন।
সঠিক উপায় হ'ল সকেটগুলি ব্যবহার করা, এ কারণেই সেগুলি আবিষ্কার করা হয়েছিল, আপনি কমান্ড লাইনে এটি ব্যবহার করতে 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