2013-04-09 36 views
13

Tôi hy vọng đây không phải là bản sao.subprocess.Popen trong giao diện điều khiển khác nhau

Tôi đang cố gắng sử dụng subprocess.Popen() để mở tập lệnh trong bảng điều khiển riêng biệt. Tôi đã thử thiết lập các tham số shell=True nhưng điều đó đã không làm các trick.

tôi sử dụng một 32 bit Python 2.7 trên Windows 64 bit 7.

+0

Bạn không cho thấy một thực tế mã cơ sở, vì vậy tôi chỉ tạo ra một ví dụ lệnh dưới đây dựa trên 'dir' trong cửa sổ và' ls' trong linux cho nội dung thư mục danh sách. – Torxed

+0

@Torxed Tôi đã thử mã của bạn và có một vài điều mà tôi không thích: Tôi không thấy bảng điều khiển mới bật lên. Tôi muốn một bàn giao tiếp thứ hai được tạo ra và có thể đọc đầu ra của chương trình mà tôi chạy với 'popen' trong bảng điều khiển mới. Trong chương trình chính của tôi, tôi không cần đầu ra của chương trình mà tôi chạy với 'popen'. Tôi chỉ cần nhìn thấy nó trong một giao diện điều khiển khác nhau. Bạn có thể vui lòng cung cấp một ví dụ về cách thực hiện điều này không? –

+0

Điều đó không rõ ràng từ mô tả vấn đề ban đầu của bạn, bởi vì bạn thấy, "mở một kịch bản trong một bàn điều khiển riêng biệt" đó chính xác là những gì '.Popen()' làm, và nếu bạn kiểm tra quá trình giám sát của bạn, bạn sẽ thấy một cmd .exe được khởi chạy từ bạn gọi '.Popen()', nó chỉ không hiển thị vì nó là một tiến trình con cho ứng dụng của bạn và nó bị "tắt tiếng". Bạn thường không mở các cửa sổ GUI mới chỉ để thực hiện các tác vụ, vì vậy tôi có thể hỏi tại sao bạn muốn điều này? bởi vì nó có vẻ ngược lại với tôi:/ – Torxed

Trả lời

3
from subprocess import * 

c = 'dir' #Windows 

handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True) 
print handle.stdout.read() 
handle.flush() 

Nếu bạn không sử dụng shell=True bạn sẽ phải cung cấp Popen() với một danh sách thay vì một chuỗi lệnh, ví dụ:

c = ['ls', '-l'] #Linux 

và sau đó mở nó mà không có vỏ.

handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE) 
print handle.stdout.read() 
handle.flush() 

Đây là cách thủ công và linh hoạt nhất mà bạn có thể gọi là tiến trình con từ Python. Nếu bạn chỉ muốn đầu ra, đi cho:

from subproccess import check_output 
print check_output('dir') 

Để mở một cửa sổ giao diện điều khiển giao diện mới và thực hiện X:

import os 
os.system("start cmd /K dir") #/K remains the window, /C executes and dies (popup) 
15

Để mở trong một giao diện điều khiển khác nhau, làm (thử nghiệm trên Win7/Python 3):

from subprocess import Popen, CREATE_NEW_CONSOLE 

Popen('cmd', creationflags=CREATE_NEW_CONSOLE) 

input('Enter to exit from Python script...') 

liên quan

How can I spawn new shells to run python scripts from a base python script?

+0

đó là những gì tôi đang tìm kiếm, cảm ơn :) ... bây giờ tôi phải thiết lập một tiến độ trước khi tung ra nhiệm vụ khác của mình ... –

3

Tôi đã thử tạo thẻ phát = CREATE_NEW_CONSOLE trên Win7/python 2.7 và cũng đã hoạt động.

+0

Điều này đúng hơn là một nhận xét về câu trả lời thực tế, chứ không phải là câu trả lời trên chính nó. Bạn có thể muốn đọc http://stackoverflow.com/tour – gturri

+0

Người dùng mới không thể nhận xét về câu trả lời. Lựa chọn duy nhất của David cho một câu trả lời là một câu trả lời mới. – ohhorob

Các vấn đề liên quan