2011-01-31 34 views

Trả lời

93

Nếu bạn muốn ghi đầu ra vào tệp, bạn có thể sử dụng stdout -giá trị của subprocess.call.

Phải mất None, subprocess.PIPE, đối tượng tệp hoặc bộ mô tả tệp. Đầu tiên là mặc định, stdout được thừa kế từ cha mẹ (script của bạn). Thứ hai cho phép bạn đường ống từ một lệnh/quá trình khác. Thứ ba và thứ tư là những gì bạn muốn, để có đầu ra ghi vào một tập tin.

Bạn cần phải mở một tập tin với một cái gì đó giống như open và vượt qua các đối tượng hay tập tin mô tả số nguyên để call:

f = open("blah.txt", "w") 
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f) 

Tôi đoán bất kỳ đối tượng tập tin giống như hợp lệ sẽ làm việc, giống như một ổ cắm (thở hổn hển :)), nhưng tôi chưa bao giờ thử.

marcog đề cập trong nhận xét bạn cũng có thể muốn chuyển hướng stderr, bạn có thể chuyển hướng này đến cùng một vị trí như stdout với stderr=subprocess.STDOUT. Bất kỳ giá trị nào được đề cập ở trên đều hoạt động tốt, bạn có thể chuyển hướng đến các địa điểm khác nhau.

+1

Vâng, công việc của ổ cắm cũng vậy. – ocodo

+1

tại sao không subprocess.call (["echo", "1", ">>", "t.txt"]) hoạt động? – Goldname

+2

@Goldname bạn cần một trình bao để thực hiện chuyển hướng, vì vậy: 'subprocess.call ([" echo "," 1 "," >> "," t.txt "], shell = True)' nên hoạt động. –

16

Các tùy chọn cho popen có thể được sử dụng trong call

args, 
bufsize=0, 
executable=None, 
stdin=None, 
stdout=None, 
stderr=None, 
preexec_fn=None, 
close_fds=False, 
shell=False, 
cwd=None, 
env=None, 
universal_newlines=False, 
startupinfo=None, 
creationflags=0 

Vậy ...

subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput) 

Sau đó, bạn có thể làm những gì bạn muốn với myoutput (mà sẽ cần phải là một tập tin btw).

Ngoài ra, bạn có thể làm điều gì đó gần hơn với đầu ra đường ống như thế này.

dmesg | grep hda 

sẽ là:

p1 = Popen(["dmesg"], stdout=PIPE) 
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) 
output = p2.communicate()[0] 

Có rất nhiều thông tin đáng yêu, hữu ích trên python manual page.

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