2009-06-17 11 views
5

कुछ कोड पर कार्य करना और मैं त्रुटि दिया हूँ जब यह कमांड प्रॉम्प्ट से चल रहा है ...popen और अजगर

NameError: name 'Popen' is not defined 

लेकिन मैं import os और import sys दोनों आयात कर लिया।

यहाँ कोड

exepath = os.path.join(EXE File location is here) 
exepath = '"' + os.path.normpath(exepath) + '"' 
cmd = [exepath, '-el', str(el), '-n', str(z)] 

print 'The python program is running this command:' 
print cmd 

process = Popen(cmd, stderr=STDOUT, stdout=PIPE) 
outputstring = process.communicate()[0] 

Am मैं कुछ प्राथमिक लापता का हिस्सा है? मुझे शक नहीं होगा। धन्यवाद!

+0

पायथन का संस्करण निर्दिष्ट करें। कुछ मॉड्यूल अजगर 2.6 – van

+1

अजगर में बदल रहे थे 2.5 कहने के बाद ... प्रक्रिया = os.Popen (cmd, stderr = STDOUT, stdout = पाइप) यह अब मुझे त्रुटि देता है ... NameError: नाम 'STDOUT' परिभाषित नहीं किया गया है – Tyler

+0

@ टाइलर: इसके बाद मेरा उत्तर – SilentGhost

उत्तर

30

आपको क्या करना चाहिए:

import subprocess 
subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE) 
# etc. 
+0

उसके बाद .. विंडोज एरर: [त्रुटि 3] सिस्टम निर्दिष्ट पथ नहीं ढूंढ सकता – Tyler

-1

यदि आप बस ओएस आयात करते हैं तो आपको os.popen() का उपयोग करना चाहिए।

+0

मैंने उपप्रोसेसर भी आयात किया है अगर इससे कुछ भी स्पष्ट करने में मदद मिलती है – Tyler

+0

आप "पॉपन()" का आह्वान कर रहे हैं, वास्तव में आपको उपरोक्त आयात पॉपन से "os.popen()" –

7

popen उपप्रक्रिया मॉड्यूल

import subprocess 
... 
subprocess.Popen(...) 

या में परिभाषित किया गया है:

from subprocess import Popen 
Popen(...) 
+0

का उपयोग करना चाहिए; नाम 'STDOUT': popen (...) – van

+0

कह ... प्रक्रिया = os.Popen (cmd, stderr = STDOUT, stdout = पाइप) यह अब मुझे त्रुटि देता है ... NameError के बाद – Tyler

+0

प्रक्रिया = subprocess.Popen (cmd, stderr = subprocess.STDOUT, stdout = subprocess.PIPE) –

1

अपने आयात इस तरह दिखाई देता है:

import os 

तो फिर तुम बातों में शामिल संदर्भित करने के लिए की जरूरत है ओएस इस तरह:

os.popen() 

आप न कि क्या करना चाहते हैं, तो आप इस तरह देखने के लिए अपने आयात बदल सकते हैं:

from os import * 

कौन सा अनुशंसित नहीं है क्योंकि यह नाम स्थान अस्पष्टता (अपने कोड में चीजें आयातित चीजों के साथ परस्पर विरोधी को जन्म दे सकता । कहीं और) आप, साथ ही कर सकता है:

from os import popen 

कौन सा ओएस से की तुलना में पढ़ने के लिए अधिक स्पष्ट और आसान है आयात *

2

जब आप एक मॉड्यूल आयात करते हैं, वें ई मॉड्यूल के सदस्य वैश्विक नामस्थान का हिस्सा नहीं बनते हैं: आपको अभी भी उन्हें modulename. से उपसर्ग करना होगा। (अजगर> = 2,4)

from os import popen # Or, from os import * to import everything 
process = popen(command, mode, bufsize) 
1

यह उपप्रक्रिया मॉड्यूल से popen की तरह दिखता है: तो, आप वैकल्पिक रूप से

import os 
process = os.popen(command, mode, bufsize) 

कहने के लिए, आप ग्लोबल नेम स्पेस में चीजों को आयात करने from module import names सिंटैक्स का उपयोग कर सकते हैं

from subprocess import Popen 
संबंधित मुद्दे