2017-06-22 9 views
5

के रूप में कमांड कैसे चलाएं मैं पाइथन में एक कोड लिख रहा हूं जिसमें मुझे सॉफ़्टवेयर के नाम से इंटरनेट ट्रैफ़िक प्राप्त करने की आवश्यकता है। मुझे cmd कमांड netstat -nb का उपयोग करने की आवश्यकता है, कमांड जिसके लिए ऊंचाई की आवश्यकता है। मुझे इसे सरल रखना है, एक पंक्ति या तो कुछ, कोई लंबी बैच या पावरहेल स्क्रिप्ट नहीं है। यह बेहतर है अगर मैं केवल उपप्रोसेसर पायथन पुस्तकालय का उपयोग करता हूं।पावरहेल और पायथन - व्यवस्थापक

मैं कोड की दो पंक्तियाँ है कि मैं क्या जरूरत के आधे रास्ते से काम मिल गया है:

subprocess.check_output('powershell Start-Process netstat -ArgumentList "-nb" -Verb "runAs"', stdout=subprocess.PIPE, shell=True) 

इस एक में समस्या यह है कि एक नई विंडो इसे खोला है और सभी डेटा की आवश्यकता खत्म हो जाता है है। हो सकता है कि दूसरी विंडो खोलने या नई विंडो से आउटपुट को सहेजने का कोई तरीका न हो?

subprocess.check_output('powershell Invoke-Command {cmd.exe -ArgumentList "/c netstat -nb"}', stdout=subprocess.PIPE, shell=True) 

यह एक मैं एक ही विंडो में उत्पादन है, लेकिन मैं ऊंचाई की जरूरत नहीं है तो मैं किसी भी परिणाम प्राप्त नहीं है ... हो सकता है कि वहाँ एक नई विंडो तो खोलने या बिना पदोन्नति हो रही का एक तरीका है ?

आपकी मदद के लिए धन्यवाद, आशा है कि मेरा प्रश्न पर्याप्त स्पष्ट होगा।

+0

आप शक्तियों का उपयोग क्यों कर रहे हैं जब आप केवल उन आदेशों को सीधे कॉल कर सकते हैं? – TheIncorrigible1

+2

पावरशेल को आपके लिए ऐसा करने के बजाय पाइथन को क्यों ऊंचा नहीं किया गया है? [इस] (https://stackoverflow.com/a/41930586/3245749) पर विवरण के लिए एक और SO प्रश्न का उत्तर दें। – TheMadTechnician

+0

क्या आपने 'RUNAS' कमांड पर एक नज़र डाली है? – lit

उत्तर

1

एक बैच फ़ाइल बनाएँ अस्थायी फाइल करने के लिए कब्जा कर लिया उत्पादन के साथ कार्य करने के लिए:

[donetstat.bat] 
netstat -nb > ".\donetstat.tmp" 

फिर निष्पादित कि अपने कार्यक्रम में:

[yourprogram.py] 
subprocess.check_output('powershell Start-Process cmd -ArgumentList "/c ".\donetstat.tmp" -Verb "runAs"', stdout=subprocess.PIPE, shell=True) 

यह शायद होगा थोड़ा अधिक TEMP पर्यावरण परिवर्तनीय प्राप्त करने के लिए बुलेट-प्रतिरोधी और इसे पूरी तरह से योग्य टेम्पफ़ाइल स्थान के लिए उपयोग करें:

netstat -nb > "%TEMP%.\donetstat.tmp" 

और फिर अपनी पायथन लिपि में ऐसा ही करें।

एक बार जब आप टेम्पफाइल बनाते हैं, तो आप इसे पायथन में संसाधित करने में सक्षम होना चाहिए।

यदि इसे एकाधिक कार्यकर्ता प्रक्रियाओं के साथ टिकाऊ होने की आवश्यकता है, तो यह सुनिश्चित करने के लिए कुछ कोड जोड़ें कि आपके पास प्रत्येक प्रक्रिया के लिए एक अद्वितीय टेम्पफाइल है।

संबंधित मुद्दे