Cập nhật: Khi tôi sử dụng subprocess.call
thay vì subprocess.Popen
, vấn đề được giải quyết - không ai biết nguyên nhân là gì? Và có một vấn đề khác: Tôi dường như không thể tìm thấy một cách để kiểm soát đầu ra ... Có cách nào để chuyển hướng đầu ra từ subprocess.call
đến một chuỗi hoặc một cái gì đó như thế? Cảm ơn!Khi tôi viết một kịch bản python để chạy Devenv với cấu hình "Debug | Win32" nó không có gì
Tôi đang cố gắng sử dụng Devenv
để xây dựng các dự án, và nó chỉ chạy tốt khi tôi gõ vào dấu nhắc lệnh như devenv A.sln /build "Debug|Win32"
- nhưng khi tôi sử dụng một con trăn để chạy nó bằng cách sử Popen(cmd,shell=true)
nơi cmd
là dòng tương tự như trên, nó cho thấy không có gì. Nếu tôi xóa |
, hãy thay đổi thành chỉ "Debug"
, nó hoạt động ....
Có ai biết tại sao điều này xảy ra không? Tôi đã thử đặt một \
trước |
, nhưng vẫn không có gì xảy ra ..
Đây là mã tôi đang sử dụng:
from subprocess import Popen, PIPE
cmd = ' "C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE\\devenv" solution.sln /build "Debug|Win32" '
sys.stdout.flush()
p = Popen(cmd,shell=True,stdout=PIPE,stderr=PIPE)
lines = []
for line in p.stdout.readlines():
lines.append(line)
out = string.join(lines)
print out
if out.strip():
print out.strip('\n')
sys.stdout.flush()
... mà không làm việc, tuy nhiên, nếu tôi trao đổi Debug|Win32
với Debug
, nó hoạt động một cách hoàn hảo ..
Cám ơn tất cả các bình luận ở đây
Chỉ cần một linh cảm xuất hiện trong đầu tôi, bạn đã sử dụng popen nào/bạn có thể hiển thị câu lệnh nhập không? –
Chắc chắn, đó là: từ subprocess nhập khẩu Popen, PIPE p = Popen (cmd, vỏ = True, stdout = PIPE, stderr = PIPE) nơi cmd là một cái gì đó như ' ".. (đường dẫn)/devenv" giải pháp/xây dựng "Debug | Win32" ... có vẻ như | dấu hiệu làm cho toàn bộ lệnh bị bỏ qua ... –
Tôi phát hiện ra rằng tạo ra một tập tin compile.bat trên bay trong Python, trong đó có chứa toàn bộ 'devenv.com' lệnh, và sau đó chạy compile.bat từ Python bằng cách sử dụng' Popen' hoạt động như một say mê. –