मैं बाहरी प्रक्रियाओं से मौजूदा प्रक्रिया के STDIN
पर डेटा लिखने के तरीकों की तलाश कर रहा हूं, और स्टैक ओवरलो में How do you stream data into the STDIN of a program from different local/remote processes in Python? समान प्रश्न मिला।बाहरी प्रक्रिया से मौजूदा प्रक्रिया के एसटीडीआईएन में डेटा कैसे लिखें?
उस धागे में, @ माइकल का कहना है कि हम नीचे की तरह पथ में मौजूदा प्रक्रिया के फाइल डिस्क्रिप्टर प्राप्त कर सकते हैं, और लिनक्स पर डेटा लिखने की अनुमति दे सकते हैं।
/proc/$PID/fd/
तो, मैं स्क्रिप्ट के STDIN
(और TTY
) बाहरी प्रक्रिया से करने के लिए डेटा लेखन का परीक्षण करने के नीचे सूचीबद्ध एक सरल स्क्रिप्ट बनाने के बाद।
#!/usr/bin/env python
import os, sys
def get_ttyname():
for f in sys.stdin, sys.stdout, sys.stderr:
if f.isatty():
return os.ttyname(f.fileno())
return None
if __name__ == "__main__":
print("Try commands below")
print("$ echo 'foobar' > {0}".format(get_ttyname()))
print("$ echo 'foobar' > /proc/{0}/fd/0".format(os.getpid()))
print("read :: [" + sys.stdin.readline() + "]")
यह परीक्षण स्क्रिप्ट STDIN
और TTY
के रास्ते से पता चलता है और फिर, एक यह STDIN
है लिखने के लिए प्रतीक्षा करें।
मैंने इस स्क्रिप्ट को लॉन्च किया और नीचे संदेश प्राप्त किए।
Try commands below
$ echo 'foobar' > /dev/pts/6
$ echo 'foobar' > /proc/3308/fd/0
तो, मैं आदेश echo 'foobar' > /dev/pts/6
और echo 'foobar' > /proc/3308/fd/0
अन्य टर्मिनल से मार डाला। दोनों आदेशों के निष्पादन के बाद, टर्मिनल पर संदेश foobar
दो बार प्रदर्शित होता है, परीक्षण स्क्रिप्ट चल रहा है, लेकिन यह सब कुछ है। लाइन print("read :: [" + sys.stdin.readline() + "]")
निष्पादित नहीं किया गया था।
बाहरी प्रक्रियाओं से डेटा को मौजूदा प्रक्रिया के STDIN
(या अन्य फ़ाइल डिस्क्रिप्टर) में लिखने के कोई तरीके हैं, यानी अन्य प्रक्रियाओं से print("read :: [" + sys.stdin.readline() + "]")
लाइन निष्पादन का आह्वान करते हैं?
क्या नामित पाइप ('मैन mkfifo' देखें) क्या आप चाहते हैं? – Andy
सुझाव के लिए धन्यवाद।मैं नामित पाइप पर एक नज़र डालेगा। – mooz