Có hai cách để thực hiện chuyển hướng. Cả hai áp dụng đối với một trong hai subprocess.Popen
hoặc subprocess.call
.
Đặt đối số từ khóa shell = True
hoặc executable = /path/to/the/shell
và chỉ định lệnh giống như bạn có nó ở đó.
Vì bạn chỉ chuyển hướng đầu ra thành một tệp, hãy đặt đối số từ khóa
stdout = an_open_writeable_file_object
trong đó đối tượng trỏ đến output
tập tin.
subprocess.Popen
là tổng quát hơn subprocess.call
.
Popen
không chặn, cho phép bạn tương tác với quy trình trong khi nó đang chạy hoặc tiếp tục với những thứ khác trong chương trình Python của bạn. Cuộc gọi để Popen
trả về một Popen
đối tượng.
call
không chặn. Mặc dù nó hỗ trợ tất cả các đối số giống như hàm Popen
tạo, vì vậy bạn vẫn có thể đặt đầu ra của quy trình, biến môi trường, v.v., tập lệnh của bạn chờ chương trình hoàn tất và call
trả về mã đại diện cho trạng thái thoát của quy trình.
returncode = call(*args, **kwargs)
về cơ bản giống như gọi
returncode = Popen(*args, **kwargs).wait()
call
chỉ là một chức năng tiện lợi. Việc triển khai trong CPython là trong quy trình con :
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
Như bạn có thể thấy, đó là một lớp bọc mỏng xung quanh Popen
.
call()
dường như là rất rõ ràng. Bạn có thể cung cấp một trích dẫn hoặc một liên kết để chúng tôi biết những gì cần tập trung vào một câu trả lời?