2012-11-01 36 views
9

Tôi có một tệp thi hành bên ngoài mà tôi đang cố chạy từ một tập lệnh Python. CMD chạy thực thi nhưng không có đầu ra tạo ra. Có lẽ nó thoát ra trước khi đầu ra có thể được tạo ra. Bất kỳ gợi ý về làm thế nào để trì hoãn xuất cảnh cho đến khi kết quả đầu ra được tạo ra?Làm thế nào để chạy thực thi bên ngoài bằng cách sử dụng Python?

import subprocess, sys 
from subprocess import Popen, PIPE 
exe_str = r"C:/Windows/System32/cmd C:/temp/calc.exe" 

parent = subprocess.Popen(exe_str, stderr=subprocess.PIPE) 
+2

Có lẽ tốt hơn để hỏi điều này trên Stackoverflow? – Simbamangu

+1

Câu hỏi có liên quan đến GIS không? – Mapperz

+0

Có thể bạn đã đúng. Dữ liệu đầu vào là độ cao và hướng dòng chảy là lý do tại sao tôi đăng nó ở đây. –

Trả lời

9

sử dụng subprocess.call, biết thêm here:

import subprocess 
subprocess.call(["C:\\temp\\calc.exe"]) 

hoặc

import os 
os.system('"C:/Windows/System32/notepad.exe"') 

tôi hy vọng nó sẽ giúp bạn ...

+0

Nó chạy nhưng không có đầu ra. Tôi đã thử nghiệm thực thi bằng cmd và nó đòi hỏi ít nhất 2-3 giây trước khi tạo đầu ra. Đây là vấn đề, làm thế nào để làm cho nó ở lại trong 3 giây trước khi thoát bằng cách sử dụng python? –

+2

'thời gian nhập time.sleep (3)' – Aragon

+1

Lạ. Ngay cả với điều kiện 3 giây, nó không tạo ra bất kỳ đầu ra nào. Tôi tăng thời gian nhưng không sử dụng. Không chắc chắn những gì khác có thể là vấn đề. –

6

Phương pháp os.system được khấu hao và không nên được sử dụng trong các ứng dụng mới. Các mô-đun subprocess là cách pythonic để làm những gì bạn yêu cầu.

Dưới đây là một ví dụ về một số mã tôi đã viết một vài tuần trước sử dụng subprocess để tải file, lệnh bạn cần phải sử dụng để trì hoãn xuất cảnh cho đến khi dữ liệu đã được nhận và chương trình phát động hoàn thành là wait():

import subprocess 

cmd = "c:\\file.exe" 
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, creationflags=0x08000000) 
process.wait() 

creationflags=0x08000000 là thông số tùy chọn ngăn chặn việc khởi chạy cửa sổ, điều này có thể hữu ích nếu chương trình bạn đang gọi không cần xem trực tiếp.

+0

Nó vẫn không tạo ra kết quả đầu ra. Chạy hoàn hảo từ cửa sổ cmd nhưng không có đầu ra bằng cách sử dụng phương thức pythonic như bạn đã gợi ý. –

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