मुझे एक प्रणाली मिली है जिसमें कुछ अलग प्रक्रियाओं से इनपुट प्राप्त करने की आवश्यकता है। सबसे सरल एक कमांड लाइन है जहां उपयोगकर्ता मैन्युअल रूप से डेटा का उपयोग करता है। यह डेटा एक में जोड़ा जाएगा। multiprocessing.Queue
और बाद में मुख्य प्रक्रिया द्वारा संभाला, लेकिन मैं अभी तक नहीं मिल रहा है, बुला रहा हूँ raw_input
एक प्रक्रिया के अंदर "t काम करने लगता है। मैंने कोड का मांस बाहर निकाला और यहाँ एक उदाहरण दिया है:
import multiprocessing
def f():
while True:
raw_input(">>>")
p = multiprocessing.Process(target = f)
p.start()
यह सरल कोड इसे फेंकता है:
~$ python test.py
Process Process-1:
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "test.py", line 5, in f
raw_input(">>>")
EOFError: EOF when reading a line
>>>~$
मैं पायथन में एक प्रक्रिया में कमांड लाइन इनपुट कैसे प्राप्त कर सकता हूं?
उत्तर:
जवाब के लिए 9 № 1जब आप पाइथन में एक धागा बनाते हैं, यह स्टड बंद कर देता है। आप मानक इकट्ठा करने के लिए एक उपप्रकार का उपयोग नहीं कर सकते हैंइनपुट। इनपुट को इकट्ठा करने के लिए मुख्य धागे का उपयोग करें और उन्हें मुख्य धागे से कतार में पोस्ट करें। स्टड को दूसरे धागे से पारित करना संभव हो सकता है, लेकिन आपको इसे अपने मुख्य धागे में बंद करने की आवश्यकता है।
जवाब के लिए 2 № 2
मैं उपप्रकार में स्टड को फिर से खोलने के लिए fdopen () का उपयोग करके इसके आसपास काम करने में सक्षम था। यह जवाब देखें। ऐसा लगता है कि काम कर रहा है, मुझे पता नहीं है कि क्या कोई छिपा हुआ जोखिम है।