2015-01-12 15 views
5

Tôi có vấn đề với Popen.communicate().Popen.communicate() trả về (Không có, Không) ngay cả khi kịch bản in kết quả

Tôi có tập lệnh trả về chuỗi.

kịch bản thứ hai Sau đó, tôi đã viết trong đó có biến đó.

v = "./myscript arg1 arg2" 
com = subprocess.Popen(v, shell=True).communicate() 
print com 

com trả về (Không, Không có). Vấn đề là tôi có thể in bên trong kịch bản lệnh đầu tiên kết quả, cũng như kết quả in vỏ . Tôi không thể chỉ định rằng in để biến.

Tất nhiên kịch bản đầu tiên trả về giá trị, chứ không phải in nó.

+2

Nếu bạn định sử dụng đầu ra tiêu chuẩn để truyền đạt kết quả từ 'myscript' trở lại tập lệnh Python của bạn, bạn sẽ không cần' myscript' để in một thứ gì đó vào STDOUT? – rchang

+0

Đó là giải pháp. –

Trả lời

5

Từ docs:

Lưu ý rằng nếu bạn muốn gửi dữ liệu đến thiết bị nhập chuẩn của quá trình, bạn cần phải tạo đối tượng Popen với stdin=PIPE. Tương tự, để nhận được bất kỳ thứ gì khác ngoài None trong bộ kết quả, bạn cũng cần cung cấp cho stdout=PIPE và/hoặc stderr=PIPE.

Do đó, tạo ra các đối tượng Popen với:

subprocess.Popen('lsr', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
+0

Cảm ơn! Đó là một bước foward, nhưng bây giờ tôi nhận được chuỗi rỗng -.- –

+0

Câu trả lời lười biếng không chỉ định nơi để thêm 'stdout = PIPE' hoặc' stderr = PIPE'. – N8TRO

0

Ok, rchang tìm ra giải pháp. Có lẽ nó sẽ hữu ích cho những người viết kịch bản mới như tôi.

Các kịch bản chính không in kết quả, nhưng trở lại. Tôi nghĩ rằng nó shoud là đối diện.

Cảm ơn!

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