2011-08-18 9 views
13

Tôi có một kịch bản python sử dụng tiến trình con:Windows - chạy py trực tiếp vs chạy python blah.py cư xử khác nhau

import subprocess 
print "Running stuff" 
subprocess.check_call(["do_stuff.bat"]) 
print "Stuff run" 

Nếu đây được mệnh danh là blah.py, và tôi chạy (từ một dấu nhắc lệnh) :

python blah.py 

Tôi sẽ nhận được kết quả từ do_stuff.bat (hoặc bất kỳ thứ gì tôi chạy).

Nếu đây là chạy như:

blah.py 

Sau đó, tôi không nhận được kết quả từ do_stuff.bat, chỉ có những điều khoản in.

Cho đến nay đã thấy trên Windows Server 2003. Phiên bản Python 2.5.2 (bị kẹt ở đó vì nhiều lý do khác nhau). Nhìn vào loại tập tin hành động liên quan đến tôi thấy:

Python.File = "C: \ Python25 \ python.exe" "% 1" % *

Vì vậy, bất cứ ai có thể giải thích sự khác biệt?

+1

tôi sẽ đánh bạo đoán và nói rằng python gọi một cách rõ ràng làm cho các tiêu chuẩn thiết bị đầu cuối ra trong khi chỉ kêu gọi các tập tin ống tiêu chuẩn ra ở một nơi khác. Tôi không thể xác nhận điều này. – Exelian

+0

Trên một cửa sổ 7 64 bit chạy đầu ra Python 2.6.6 từ một lô được in ra màn hình sau khi tự gọi chính nó. – Helbreder

+0

Trên cửa sổ của tôi 7 32 bit chạy Python 2.6.6 không thể tái tạo nó. –

Trả lời

1

Tôi gặp sự cố thường gặp khi sử dụng chuỗi, nhưng tất cả mã của tôi đều nằm trong python. Chủ đề không thể ghi vào đầu ra tiêu chuẩn bằng cách sử dụng in. Chỉ có chủ đề chính mới có thể làm điều đó. Tôi đã từng như thế này somethnig

import sys 
sys.stdout.write("this was printed by thread") 

Tôi biết rằng có lẽ nó sẽ không giúp bạn với file bat ...

+0

Điều này thật thú vị và có thể có một sự mang về cách thức hoạt động của quy trình con - nó sẽ không giải quyết được vấn đề, nhưng có liên quan. –

+2

* Chủ đề không thể ghi vào đầu ra tiêu chuẩn bằng cách sử dụng in * Tại sao bạn nghĩ vậy? –