मैं इस तरह एक उपप्रक्रिया में tcpdump
चला रहा हूँ के बाद एक tcpdump उपप्रक्रिया से stdout करना:समाप्त यह
pcap_process = subprocess.Popen(['tcpdump', '-s 0', '-w -', 'tcp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-w -
तर्क महत्वपूर्ण है: यह tcpdump
बताता stdout
के परिणामस्वरूप .pcap फ़ाइल को मुद्रित करने के लिए।
मैं urllib.open()
का उपयोग कर वेबसाइट तक पहुंचने के लिए जाता हूं। ऐसा करने के बाद, मैं tcpdump
को मारना चाहता हूं और जो भी इसे स्ट्रिंग में मुद्रित करता हूं उसे डाल देना चाहता हूं। मैंने निम्नलिखित कोशिश की है:
pcap_process.terminate()
result = pcap_process.stdout.read() # or readline(), etc.
लेकिन (जब तक कि मैं कुछ गलत नहीं कर रहा), यह काम नहीं करता है; मैंने प्रक्रिया को मार दिया, अब पढ़ने के लिए कुछ भी नहीं बचा है। अगर मैं समाप्त होने से पहले read()
या communicate()
का उपयोग करता हूं, तो मेरी स्क्रिप्ट बस वहां बैठेगी और tcpdump
को समाप्त करने के लिए प्रतीक्षा कर रही है (जो यह नहीं होगी)।
क्या ऐसा करने का कोई तरीका है (अधिमानतः बिना लूप के)?
आप 'tcpdump' के मापदंडों में से प्रत्येक के लिए अलग से पारित करने के लिए की जरूरत है:' popen ([ 'tcpdump', '-s', '0', '-w', '-', 'tcp'], ...) '। एकल तर्क '-w -' को दो तर्क' -w' और '-', आदि के रूप में समझा नहीं जाता है। –
सच है, यह सही उत्तर होगा :) धन्यवाद वैसे भी! –