2009-06-17 32 views
5

Làm việc trên một số mã và tôi là đưa ra báo lỗi khi chạy nó từ dấu nhắc lệnh ...Popen và trăn

NameError: name 'Popen' is not defined 

nhưng tôi đã nhập cả import osimport sys.

Dưới đây là một phần của mã

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 tôi thiếu cái gì tiểu học? Tôi sẽ không nghi ngờ điều đó. Cảm ơn!

+0

chỉ định phiên bản Python. số mô-đun đã được thay đổi trong python-2,6 – van

+1

Python 2.5 Sau khi nói ... quá trình = os.Popen (cmd, stderr = STDOUT, stdout = PIPE) nó bây giờ mang lại cho tôi những lỗi ... NameError: tên 'STDOUT' không được xác định – Tyler

+0

@Tyler: đọc lại câu trả lời của tôi – SilentGhost

Trả lời

30

bạn nên làm:

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

Sau đó .. WindowsError: [Lỗi 3] Hệ thống không thể tìm thấy đường dẫn được chỉ định – Tyler

-1

Bạn nên sử dụng os.popen() nếu bạn chỉ cần nhập os.

+0

Tôi cũng đã nhập quy trình con nếu điều đó giúp làm rõ mọi thứ – Tyler

+0

Bạn đang gọi "Popen()" khi thực tế bạn nên sử dụng "os.popen()" –

7

Popen được định nghĩa trong mô-đun subprocess

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

Hoặc:

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

từ nhập tiến trình con Popen; Popen (...) – van

+0

Sau khi nói ... quá trình = os.Popen (cmd, stderr = STDOUT, stdout = PIPE) nó bây giờ mang lại cho tôi những lỗi ... NameError: Tên 'STDOUT' không được xác định – Tyler

+0

process = subprocess.Popen (cmd, stderr = subprocess.STDOUT, stdout = subprocess.PIPE) –

1

Nếu nhập của bạn trông như thế này:

import os 

Sau đó, bạn cần phải tham khảo những điều có trong os như thế này:

os.popen() 

Nếu bạn không muốn làm điều đó, bạn có thể thay đổi khẩu của bạn trông như thế này:

from os import * 

Đó là không được khuyến khích vì nó có thể dẫn đến sự mơ hồ không gian tên (những thứ trong mã của bạn mâu thuẫn với điều nhập khẩu . ở nơi khác) bạn cũng có thể chỉ cần làm:

from os import popen 

Đó là rõ ràng hơn và dễ đọc hơn từ import os *

2

Khi bạn nhập một mô-đun, thứ Thành viên của mô-đun điện tử không trở thành một phần của không gian tên chung: bạn vẫn phải thêm tiền tố cho họ với modulename.. Vì vậy, bạn có thể nói

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

Ngoài ra, bạn có thể sử dụng cú pháp from module import names nhập khẩu mọi thứ vào không gian tên toàn cầu:

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

này trông giống như Popen từ mô-đun subprocess (python> = 2,4)

from subprocess import Popen