दिलचस्प पोस्ट
सूरज क्यों होता है। Mesc.Unsafe अस्तित्व में है, और इसे वास्तविक दुनिया में कैसे इस्तेमाल किया जा सकता है? एंड्रॉइड वेब ब्राउजर के जरिए पहली बार "डाउनलोड" किए बिना एक पीडीएफ प्रदर्शित कैसे करें PHP में चेतावनी संदेश निकालें XMLHttpRequest से प्रगति कैसे प्राप्त करें क्यों अहस्ताक्षरित int 0xFFFFFFFF int -1 के बराबर है? निर्धारित करें कि किस विन्यास फाइल का उपयोग किया जा रहा है स्विफ्ट में "अनवरोधित मूल्य" क्या है? जीआईटी रिमोट अन्य एसएसएच पोर्ट के साथ जोड़ें क्या अंतरफलक डिफ़ॉल्ट रूप से ऑब्जेक्ट बढ़ाता है? $ (विंडो) के बीच अंतर क्या है। लोड और $ (दस्तावेज़)। परम्परागत रूप से "System.Collections.Generic.IEnumerable" टाइप कर सकते हैं, नहीं करने के लिए: System.Collections.Generic.List <string> आगंतुक से वास्तविक आईपी कैसे प्राप्त करें? Node.js में मूलभूत HTML लोड करना भारतीय नंबरिंग प्रारूप में मुद्रा प्रदर्शित सी में सीएसवी फ़ाइल पढ़ें

कमांड लाइन कॉल (linux) के लिए पायथन, ओएससिस्टम क्या वापस नहीं करना चाहिए?

मुझे कुछ कमांड लाइन को लिनक्स पर कॉल करने की ज़रूरत है और इसे वापस लौटाने की आवश्यकता है, हालांकि नीचे की तरफ से यह केवल 0 लौट रहा है जब इसे समय मान वापस करना चाहिए, जैसे कि 00:08:19 , मैं नियमित रूप से उसी कॉल का परीक्षण कर रहा हूं कमांड लाइन और यह टाइम वेल्यू देता है I किसी भी सलाह की सराहना की है।

 import os retvalue = os.system("ps -p 2993 -o time --no-headers") print retvalue 

वेब के समाधान से एकत्रित समाधान "कमांड लाइन कॉल (linux) के लिए पायथन, ओएससिस्टम क्या वापस नहीं करना चाहिए?"

इस आदेश को निष्पादित करने के बदले मूल्य क्या मिलता है? इसे सीधे निष्पादित करते समय आप जो देखते हैं वह stdout में कमांड का आउटपुट होता है। 0 का अर्थ वापस कर दिया गया है, निष्पादन में कोई त्रुटि नहीं थी।

आउटपुट कैप्चर करने के लिए पॉपन आदि का उपयोग करें।

इस रेखा के साथ कुछ बात:

 import subprocess as sub p = sub.Popen(['your command', 'arg1', 'arg2', ...],stdout=sub.PIPE,stderr=sub.PIPE) output, errors = p.communicate() print output 

या

 import os p = os.popen('command',"r") while 1: line = p.readline() if not line: break print line 

इतने पर: Popen और अजगर

यदि आप केवल प्रक्रिया से आउटपुट में दिलचस्पी रखते हैं, तो उपप्रोसेस ' चेक_आउटपुट फ़ंक्शन का उपयोग करना सबसे आसान है:

 output = subprocess.check_output(["command", "arg1", "arg2"]); 

तब आउटपुट में प्रोग्राम आउटपुट stdout पर रखता है। अधिक जानकारी के लिए ऊपर दिए गए लिंक की जांच करें

आपका कोड 0 देता है यदि पारित आदेशों का निष्पादन सफल और गैर शून्य है यदि यह विफल रहता है। निम्नलिखित प्रोग्राम python2.7 पर काम करता है, हेवन की जाँच की गई 3 और ऊपर के संस्करण। इस कोड को आज़माएं

 >>> import commands >>> ret = commands.getoutput("ps -p 2993 -o time --no-headers") >>> print ret 

हां, यह प्रति-सहज ज्ञान युक्त है और बहुत ही अजगर नहीं लगता है, लेकिन यह वास्तव में केवल यूनिक्स एपीआई डिजाइन की नकल करता है, जहां ये सील्ड सी पॉसिक्स फ़ंक्शन हैं। man 3 popen एंड man 3 system

मैं os.system को बदलने के लिए कुछ अधिक सुविधाजनक स्निपेट का उपयोग करता हूं:

 from subprocess import (PIPE, Popen) def invoke(command): ''' Invoke command as a new system process and return its output. ''' return Popen(command, stdout=PIPE, shell=True).stdout.read() result = invoke('echo Hi, bash!') # Result contains standard output (as you expected it in the first place). 

सबसे सरल तरीका यह है:

 import os retvalue = os.popen("ps -p 2993 -o time --no-headers").readlines() print retvalue 

इसे एक सूची के रूप में लौटा दिया जाएगा

मैं IonicBurger पर कोई टिप्पणी नहीं जोड़ सकता क्योंकि मेरे पास "50 प्रतिष्ठा" नहीं है इसलिए मैं एक नई प्रविष्टि जोड़ूंगा मैं क्षमाप्रार्थी हूं। os.popen () एकाधिक / जटिल आदेशों (मेरी राय) के लिए सबसे अच्छा है और साथ ही रिटर्न मान प्राप्त करने के अलावा stdout को निम्न अधिक जटिल एकाधिक आदेशों की तरह प्राप्त करने के लिए:

 import os out = [ i.strip() for i in os.popen(r"ls *.py | grep -i '.*file' 2>/dev/null; echo $? ").readlines()] print " stdout: ", out[:-1] print "returnValue: ", out[-1] 

यह उन सभी अजगर फ़ाइलों की सूची देगा जिनके पास उनके नाम पर कहीं भी 'फ़ाइल' शब्द है […] एक प्रविष्टि के नए अक्षर को (पट्टी) को हटाने के लिए एक सूची समझ है प्रतिध्वन $? एक शेल कमांड है जो अंतिम कमांड की वापसी की स्थिति को प्रदर्शित करता है जो grep कमांड और इस उदाहरण में सूची का अंतिम आइटम होगा। 2> / dev / null / grep कमांड के stderr को / dev / null पर मुद्रित करने के लिए कहता है तो यह आउटपुट में दिखाई नहीं देता। 'एल' से पहले 'आर' कमांड का उपयोग कच्चे स्ट्रिंग के लिए है ताकि शेल '*' जैसे गलतचिकारकों का गलत तरीके से व्याख्या नहीं करेगा। यह अजगर 2.7 में काम करता है नमूना आउटपुट यहां दिया गया है:

  stdout: ['fileFilter.py', 'fileProcess.py', 'file_access..py', 'myfile.py'] returnValue: 0 

यह एक पुरानी धागा है, लेकिन विशुद्ध रूप से os.system का उपयोग करते os.system , निम्नलिखित ps कॉल द्वारा प्राप्त आंकड़ों तक पहुंचने का एक वैध तरीका है। नोट: यह डिस्क पर फ़ाइल में डेटा लिखने के लिए एक पाइप का उपयोग करता है। और ओपी ने विशेष रूप से os.system का इस्तेमाल करने के लिए कोई समाधान नहीं पूछा।

 >>> os.system("ps > ~/Documents/ps.txt") 0 #system call is processed. >>> os.system("cat ~/Documents/ps.txt") PID TTY TIME CMD 9927 pts/0 00:00:00 bash 10063 pts/0 00:00:00 python 12654 pts/0 00:00:00 sh 12655 pts/0 00:00:00 ps 0 

तदनुसार,

 >>> os.system("ps -p 10063 -o time --no-headers > ~/Documents/ps.txt") 0 >>> os.system("cat ~/Documents/ps.txt") 00:00:00 0 

पता नहीं क्यों कि वे सभी शून्य लौट रहे हैं हालांकि।

आपकी आवश्यकता के लिए, उपप्रोसेस अजगर मॉड्यूल का पॉपने फ़ंक्शन इसका उत्तर है। उदाहरण के लिए,

 import subprocess .. process = subprocess.Popen("ps -p 2993 -o time --no-headers", stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = process.communicate() print stdout 

ओकी मुझे विश्वास है कि यह सबसे तेज़ तरीका होगा

 import os print(os.popen('command').readline()) x = _ print(x) 
 using commands module import commands """ Get high load process details """ result = commands.getoutput("ps aux | sort -nrk 3,3 | head -n 1") print result -- python 2x print (result) -- python 3x