दिलचस्प पोस्ट
पटरियों 3.1 एसेट पाइपलाइन: नियंत्रक-विशिष्ट स्क्रिप्ट को कैसे लोड करें? #pragma पैक प्रभाव मैं एक variadic टेम्पलेट वर्ग में फंक्शन सूचक के तर्क प्रकार कैसे प्राप्त करूं? कैलरी का उपयोग करके एक विशिष्ट समय पर निष्पादित करने के लिए मैं एक कार्य कैसे शेड्यूल कर सकता हूं? असीबद्ध वाइल्डकार्ड प्रकार की सूची <?> और कच्चे प्रकार सूची में क्या अंतर है? कंटेनरों के बीच एक द्विदिश लिंक कैसे बनाएं? क्या कोई विदेशी कुंजी नल और / या डुप्लिकेट हो सकती है? नियंत्रक में HtmlHelper का उपयोग करना Node.JS लिनक्स कमांड लाइन का उपयोग कर अनइंस्टाल करें? एप्लिकेशन सेटिंग्स में int सरणी कैसे संग्रहीत करें अलग बिटेट्स और / या अलग आईडी 3 टैग के साथ डुप्लिकेट एमपी 3 फ़ाइलें खोजें? जावा – जेपीए – जेनरेटर – @ स्यूवेन्स जनरेटर मैं एन्क्रिप्शन कुंजी को जावा में कैसे सुरक्षित रूप से संग्रहीत कर सकता हूं? डीपीआई-एवेयर एप्लिकेशन बनाना रूबी के साथ या बिना शेल कमांड निष्पादित करते समय उपयोग करने के लिए निजी एसएसएच-कुंजी निर्दिष्ट करें?

अजगर सबप्रोसेस। एक थ्रेड से पॉपिन

मैं एक थ्रेड के अंदर सबप्रोसेस मॉड्यूल और पॉपन का उपयोग कर एक 'rsync' लॉन्च करने की कोशिश कर रहा हूं। आरएसआईएनसी को कॉल करने के बाद मुझे आउटपुट को भी पढ़ने की जरूरत है I मैं आउटपुट को पढ़ने के लिए संवाद पद्धति का उपयोग कर रहा हूं। जब मैं किसी थ्रेड का उपयोग नहीं करता हूं तो कोड ठीक चलता है ऐसा प्रतीत होता है कि जब मैं एक थ्रेड का उपयोग करता हूं जो संवाद कॉल पर लटका हुआ है मैंने देखा है एक और चीज यह है कि जब मैं शेल = गलत सेट करता हूं, तो मुझे थ्रेड में चलते समय संवाद से कुछ भी नहीं मिलता।

Solutions Collecting From Web of "अजगर सबप्रोसेस। एक थ्रेड से पॉपिन"

आपने हमें देखने के लिए किसी भी कोड की आपूर्ति नहीं की है, लेकिन यहां एक नमूना है जो आप जैसा वर्णन करते हैं, उसके समान कुछ करता है:

import threading import subprocess class MyClass(threading.Thread): def __init__(self): self.stdout = None self.stderr = None threading.Thread.__init__(self) def run(self): p = subprocess.Popen('rsync -av /etc/passwd /tmp'.split(), shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) self.stdout, self.stderr = p.communicate() myclass = MyClass() myclass.start() myclass.join() print myclass.stdout 

थ्रेडों का उपयोग नहीं करने वाला यह एक शानदार कार्यान्वयन है: लगातार-प्रिंट-उपप्रक्रिया आउटपुट-जबकि-प्रक्रिया-चल रहा है

 import subprocess def execute(command): process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output = '' # Poll process for new output until finished for line in iter(process.stdout.readline, ""): print line, output += line process.wait() exitCode = process.returncode if (exitCode == 0): return output else: raise Exception(command, exitCode, output) execute(['ping', 'localhost'])