Hướng dẫn python subprocess check if process is running - quy trình con python kiểm tra xem quy trình có đang chạy không
Làm Show
Theo đề xuất của câu trả lời chính, là cách được đề xuất và cách đơn giản nhất để kiểm tra xem quá trình chạy. (và nó cũng hoạt động trong Jython) Nếu bạn không có phiên bản quy trình trong tay để kiểm tra nó. Sau đó, sử dụng các quy trình DistricL / PS hệ điều hành. Trên Windows, lệnh của tôi sẽ trông như sau:
Điều này về cơ bản là làm điều tương tự như dòng lệnh sau:
Và trên Linux, tôi làm chính xác giống nhau bằng cách sử dụng:
Lệnh PS sẽ trả lại mã lỗi 0/1 tùy thuộc vào việc tìm thấy quy trình. Trong khi trên Windows, bạn cần lệnh Find String. Đây là cách tiếp cận tương tự được thảo luận trên chuỗi Overflow ngăn xếp sau: Xác minh xem một quá trình có chạy bằng PID của nó trong Java không Lưu ý: Nếu bạn sử dụng phương pháp này, hãy nhớ kết thúc cuộc gọi lệnh của bạn trong một thử/ngoại trừ:
Lưu ý, hãy cẩn thận nếu bạn đang phát triển với mã VS và sử dụng Python và Jython thuần túy. Trên môi trường của tôi, tôi đã bị ảo tưởng rằng phương pháp Poll () không hoạt động vì một quá trình mà tôi nghi ngờ rằng phải kết thúc đã thực sự chạy. Quá trình này đã ra mắt Wildfly. Và sau khi tôi yêu cầu Wildfly dừng lại, vỏ vẫn đang chờ người dùng "nhấn bất kỳ phím nào để tiếp tục.". Để kết thúc quá trình này, trong Python Pure, mã sau đây đã hoạt động:
Trên Jython, tôi đã phải sửa mã này để xem như sau:
Và với sự khác biệt này, quá trình đã thực sự kết thúc. Và jython.poll () bắt đầu nói với tôi rằng quá trình này thực sự đã kết thúc. Python phụ Popen trở lại là gì? Lib/subprocess.py Hàm popen Hàm sẽ trả một con trỏ vào một luồng có thể được sử dụng để đọc từ hoặc ghi vào đường ống trong khi cũng tạo một đường ống giữa ứng dụng gọi và lệnh được thực thi. Ngay sau khi bắt đầu, hàm popen trả về dữ liệu và nó không chờ đợi quá trình phụ kết thúc. Thông tin về cách mô -đun 5 có thể được sử dụng để thay thế các mô -đun và chức năng này có thể được tìm thấy trong các phần sau.Xem thêm PEP 324 - PEP đề xuất mô -đun phụ – PEP proposing the subprocess module Tính khả dụng: Không phải emscripten, không phải wasi.: not Emscripten, not WASI. Mô -đun này không hoạt động hoặc không có sẵn trên các nền tảng Webassugging 7 và 8. Xem các nền tảng Webassugging để biết thêm thông tin.WebAssembly platforms for more information.Sử dụng mô -đun pidStr = str(pid) commandArguments = ['ps', '-p', pidStr ] 5Cách tiếp cận được đề xuất để gọi các quy trình con là sử dụng hàm 0 cho tất cả các trường hợp sử dụng mà nó có thể xử lý. Đối với các trường hợp sử dụng nâng cao hơn, giao diện 1 cơ bản có thể được sử dụng trực tiếp.
SubProcess.run (args, *, stdin = none, input = none, stdout = none, stderr = none, capture_output = false, shell = false, cwd = none Không, Text = none, env = none, Universal_Newlines = none, ** other_popen_kwargs) ¶run(args, *, stdin=None, input=None, stdout=None,
stderr=None, capture_output=False, shell=False, cwd=None,
timeout=None, check=False, encoding=None, errors=None, text=None,
env=None, universal_newlines=None, **other_popen_kwargs)¶Chạy lệnh được mô tả bởi Args. Đợi lệnh hoàn thành, sau đó trả lại một thể hiện 2.Các đối số được hiển thị ở trên chỉ là những đối số phổ biến nhất, được mô tả dưới đây trong các đối số được sử dụng thường xuyên (do đó việc sử dụng ký hiệu chỉ từ khóa trong chữ ký viết tắt). Chữ ký chức năng đầy đủ phần lớn giống như hàm xây dựng 1 - hầu hết các đối số cho hàm này được chuyển qua giao diện đó. (Thời gian chờ, đầu vào, kiểm tra và capture_output không.)Frequently Used Arguments (hence the use of keyword-only notation in the abbreviated
signature). The full function signature is largely the same as that of the 1 constructor - most of the arguments to this function are passed through to that interface. (timeout, input, check, and capture_output are not.)Nếu Capture_output là đúng, stdout và stderr sẽ bị bắt. Khi được sử dụng, đối tượng 1 bên trong được tự động tạo bằng 5 và 6. Các đối số stdout và stderr có thể không được cung cấp cùng lúc với Capture_output. Nếu bạn muốn chụp và kết hợp cả hai luồng thành một, hãy sử dụng 5 và 8 thay vì Capture_output.Đối số thời gian chờ được chuyển đến 9. Nếu thời gian chờ hết hạn, quá trình trẻ em sẽ bị giết và chờ đợi. Ngoại lệ 0 sẽ được nuôi dưỡng lại sau khi quá trình con đã chấm dứt.Đối số đầu vào được chuyển cho 9 và do đó cho quy trình con Stdin Stdin. Nếu được sử dụng, nó phải là một chuỗi byte hoặc một chuỗi nếu mã hóa hoặc lỗi được chỉ định hoặc văn bản là đúng. Khi được sử dụng, đối tượng 1 nội bộ được tự động tạo bằng 3 và đối số Stdin cũng không được sử dụng.Nếu kiểm tra là đúng và quy trình thoát ra với mã thoát khác không, ngoại lệ 4 sẽ được nêu ra. Các thuộc tính của ngoại lệ đó giữ các đối số, mã thoát và stdout và stderr nếu chúng bị bắt.Nếu mã hóa hoặc lỗi được chỉ định hoặc văn bản là đúng, các đối tượng tệp cho stdin, stdout và stderr được mở ở chế độ văn bản bằng cách sử dụng mã hóa và lỗi được chỉ định hoặc mặc định 5. Đối số Universal_Newlines tương đương với văn bản và được cung cấp cho khả năng tương thích ngược. Theo mặc định, các đối tượng tệp được mở ở chế độ nhị phân.Nếu env không phải là 6, thì đó phải là một ánh xạ xác định các biến môi trường cho quy trình mới; Chúng được sử dụng thay vì hành vi mặc định của việc kế thừa môi trường quy trình hiện tại. Nó được chuyển trực tiếp đến 1. Ánh xạ này có thể được STR trên bất kỳ nền tảng hoặc byte nào cho byte trên các nền tảng POSIX giống như 8 hoặc 9.Examples: >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'') Mới trong phiên bản 3.5. Đã thay đổi trong phiên bản 3.6: Đã thêm thông số mã hóa và lỗiAdded encoding and errors parameters Đã thay đổi trong phiên bản 3.7: Đã thêm tham số văn bản, như một bí danh dễ hiểu hơn của Universal_Newlines. Đã thêm tham số Capture_output.Added the text parameter, as a more understandable alias of universal_newlines. Added the capture_output parameter. ClassSubProcess.completedProcess¶subprocess.CompletedProcess¶Giá trị trả về từ 0, đại diện cho một quá trình đã kết thúc. args¶¶Các đối số được sử dụng để khởi chạy quá trình. Đây có thể là một danh sách hoặc một chuỗi. ReturnCode¶¶Trạng thái thoát của quá trình trẻ em. Thông thường, trạng thái thoát là 0 chỉ ra rằng nó đã chạy thành công. Giá trị âm 1 chỉ ra rằng đứa trẻ bị chấm dứt bởi tín hiệu 2 (chỉ POSIX). Stdout¶¶Đã bắt được stdout từ quá trình trẻ em. Trình tự byte hoặc chuỗi nếu 0 được gọi với mã hóa, lỗi hoặc văn bản = true. 6 nếu stdout không bị bắt.Nếu bạn chạy quy trình với 5, stdout và stderr sẽ được kết hợp trong thuộc tính này và 6 sẽ là 6.
stderr¶¶Đã bắt Stderr từ quá trình trẻ em. Trình tự byte hoặc chuỗi nếu 0 được gọi với mã hóa, lỗi hoặc văn bản = true. 6 nếu Stderr không bị bắt.
Check_returnCode ()()¶Nếu >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')0 là không khác, hãy tăng 4.Mới trong phiên bản 3.5. Đã thay đổi trong phiên bản 3.6: Đã thêm thông số mã hóa và lỗiDEVNULL¶Đã thay đổi trong phiên bản 3.7: Đã thêm tham số văn bản, như một bí danh dễ hiểu hơn của Universal_Newlines. Đã thêm tham số Capture_output. ClassSubProcess.completedProcess¶ quá trình con.pipe¶PIPE¶Giá trị đặc biệt có thể được sử dụng làm đối số stdin, stdout hoặc stderr thành 1 và chỉ ra rằng một đường ống vào luồng tiêu chuẩn nên được mở. Hữu ích nhất với 9. quá trình con.stdout¶STDOUT¶Giá trị đặc biệt có thể được sử dụng làm đối số STDERR thành 1 và chỉ ra rằng lỗi tiêu chuẩn sẽ đi vào cùng một tay cầm như đầu ra tiêu chuẩn. ngoại lệ
subprocess.SubprocessError¶Lớp cơ sở cho tất cả các trường hợp ngoại lệ khác từ mô -đun này. Mới trong phiên bản 3.3. ngoại lệ subprocess.TimeoutExpired¶Lớp con của >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')7, được nâng lên khi hết thời gian chờ trong khi chờ đợi một quá trình trẻ em. cmd¶¶ Lệnh được sử dụng để sinh ra quá trình trẻ em. hết giờ¶¶Thời gian chờ trong giây. đầu ra¶Đầu ra của quá trình con nếu nó bị bắt bởi 0 hoặc >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')9. Nếu không, 6. Đây luôn là Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])1 khi bất kỳ đầu ra nào được ghi lại bất kể cài đặt Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])2. Nó có thể vẫn còn 6 thay vì Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])4 khi không quan sát thấy đầu ra. Stdout¶¶ Bí danh cho đầu ra, để đối xứng với 6.
stderr¶¶Đầu ra Stderr của quá trình con nếu nó bị bắt bởi 0. Nếu không, 6. Đây luôn là Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])1 khi đầu ra Stderr được ghi lại bất kể cài đặt Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])2. Nó có thể vẫn còn 6 thay vì Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])4 khi không có đầu ra STDERR nào được quan sát. Mới trong phiên bản 3.3. ngoại lệstdout and stderr attributes added Lớp con của>>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')7, được nâng lên khi hết thời gian chờ trong khi chờ đợi một quá trình trẻ em. subprocess.CalledProcessError¶ cmd¶ Lệnh được sử dụng để sinh ra quá trình trẻ em.¶hết giờ¶ cmd¶¶Lệnh được sử dụng để sinh ra quá trình trẻ em. hết giờ¶¶Thời gian chờ trong giây. Stdout¶¶Bí danh cho đầu ra, để đối xứng với 6.
stderr¶¶Đầu ra Stderr của quá trình con nếu nó bị bắt bởi 0. Nếu không, 6. Đây luôn là Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])1 khi đầu ra Stderr được ghi lại bất kể cài đặt Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])2. Nó có thể vẫn còn 6 thay vì Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])4 khi không có đầu ra STDERR nào được quan sát. ngoại lệstdout and stderr attributes added Lớp con của >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'') 7, được nâng lên khi hết thời gian chờ trong khi chờ đợi một quá trình trẻ em.cmd¶
Các tùy chọn này, cùng với tất cả các tùy chọn khác, được mô tả chi tiết hơn trong tài liệu xây dựng 1.Constructor Popen Constructor¶Việc tạo và quản lý quy trình cơ bản trong mô -đun này được xử lý bởi lớp 1. Nó cung cấp rất nhiều sự linh hoạt để các nhà phát triển có thể xử lý các trường hợp ít phổ biến hơn không được bao phủ bởi các chức năng tiện lợi. classSubProcess.popen (args, bufsize = -1, thực thi = none, stdin = none, stdout = none, stderr = none . = None, pipesize = -1, process_group = none) ¶subprocess.Popen(args,
bufsize=- 1, executable=None, stdin=None, stdout=None,
stderr=None, preexec_fn=None, close_fds=True, shell=False,
cwd=None, env=None, universal_newlines=None, startupinfo=None,
creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *,
group=None, extra_groups=None, user=None, umask=- 1,
encoding=None, errors=None, text=None, pipesize=- 1,
process_group=None)¶Thực hiện một chương trình trẻ em trong một quy trình mới. Trên Posix, lớp sử dụng hành vi giống như ____ 133 để thực hiện chương trình trẻ em. Trên Windows, lớp sử dụng chức năng Windows 34. Các đối số cho 1 như sau.Args nên là một chuỗi các đối số chương trình hoặc một đối tượng giống như một chuỗi hoặc giống như đường dẫn. Theo mặc định, chương trình thực thi là mục đầu tiên trong args nếu args là một chuỗi. Nếu Args là một chuỗi, việc giải thích phụ thuộc vào nền tảng và được mô tả dưới đây. Xem các đối số shell và thực thi để biết sự khác biệt bổ sung so với hành vi mặc định. Trừ khi có quy định khác, nên truyền ARGS như một chuỗi.path-like object. By default, the program to execute is the first item in args if args is a sequence. If args is a string, the interpretation is platform-dependent and described below. See the shell and executable arguments for additional differences from the default behavior. Unless otherwise stated, it is recommended to pass args as a sequence. Cảnh báo Để có độ tin cậy tối đa, hãy sử dụng một đường dẫn đủ điều kiện cho thực thi. Để tìm kiếm một tên không đủ tiêu chuẩn trên 36, hãy sử dụng 37. Trên tất cả các nền tảng, việc vượt qua 38 là cách được đề xuất để khởi chạy lại trình thông dịch Python hiện tại và sử dụng định dạng dòng lệnh 39 để khởi chạy mô-đun đã cài đặt. 36, use
37. On all platforms, passing 38 is the recommended way to launch the current Python interpreter again, and use the 39 command-line format to launch an installed module.Việc giải quyết đường dẫn thực thi (hoặc mục đầu tiên của Args) phụ thuộc vào nền tảng. Đối với POSIX, xem 33 và lưu ý rằng khi giải quyết hoặc tìm kiếm đường dẫn thực thi, CWD ghi đè thư mục làm việc hiện tại và ENV có thể ghi đè biến môi trường 36. Đối với Windows, hãy xem tài liệu của các tham số 42 và 43 của WinAPI 44 và lưu ý rằng khi giải quyết hoặc tìm kiếm đường dẫn thực thi với 45, CWD không ghi đè lên thư mục làm việc hiện tại và Env không thể ghi đè lên biến đổi môi trường 36. Sử dụng một đường dẫn đầy đủ tránh tất cả các biến thể này.Một ví dụ về việc chuyển một số đối số cho một chương trình bên ngoài như một chuỗi là: Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."]) Trên Posix, nếu Args là một chuỗi, chuỗi được hiểu là tên hoặc đường dẫn của chương trình để thực thi. Tuy nhiên, điều này chỉ có thể được thực hiện nếu không chuyển các đối số cho chương trình. Ghi chú Có thể không rõ ràng làm thế nào để chia một lệnh shell thành một chuỗi các đối số, đặc biệt là trong các trường hợp phức tạp. 47 có thể minh họa cách xác định mã thông báo chính xác cho ARGS:>>> import shlex, subprocess >>> command_line = input() /bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'" >>> args = shlex.split(command_line) >>> print(args) ['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"] >>> p = subprocess.Popen(args) # Success! Lưu ý cụ thể rằng các tùy chọn (chẳng hạn như -input) và các đối số (như trứng.txt) được phân tách bằng khoảng trắng trong shell đi trong các yếu tố danh sách riêng biệt, trong khi các đối số cần trích dẫn hoặc rút lại khi sử dụng Tên tệp chứa khoảng trắng hoặc lệnh Echo được hiển thị ở trên) là các yếu tố danh sách đơn. Trên Windows, nếu Args là một chuỗi, nó sẽ được chuyển đổi thành một chuỗi theo cách được mô tả trong việc chuyển đổi một chuỗi đối số thành một chuỗi trên Windows. Điều này là do 34 cơ bản hoạt động trên các chuỗi.Converting an argument sequence to a string on
Windows. This is because the underlying 34 operates on strings.Đã thay đổi trong phiên bản 3.6: Tham số Args chấp nhận một đối tượng giống như đường dẫn nếu shell là 49 and a sequence containing path-like objects on POSIX.Thay đổi trong phiên bản 3.8: Tham số Args chấp nhận một đối tượng giống như đường dẫn nếu shell là 49 and a sequence containing bytes and path-like objects on Windows.Đối số shell (mặc định là 49) chỉ định xem có nên sử dụng shell làm chương trình để thực thi hay không. Nếu shell là 04, nên chuyển args dưới dạng chuỗi chứ không phải là một chuỗi.Trên POSIX với 53, shell mặc định là 54. Nếu args là một chuỗi, chuỗi chỉ định lệnh để thực thi thông qua shell. Điều này có nghĩa là chuỗi phải được định dạng chính xác như khi được gõ tại dấu nhắc shell. Điều này bao gồm, ví dụ, trích dẫn hoặc chao đảo thoát khỏi các tên tệp với không gian trong đó. Nếu Args là một chuỗi, mục đầu tiên chỉ định chuỗi lệnh và bất kỳ mục bổ sung nào sẽ được coi là đối số bổ sung cho chính shell. Điều đó có nghĩa là, 1 có tương đương với: 0Trên Windows với 53, biến môi trường 57 chỉ định shell mặc định. Lần duy nhất bạn cần chỉ định 53 trên Windows là khi lệnh bạn muốn thực thi được tích hợp vào shell (ví dụ: dir hoặc sao chép). Bạn không cần 53 để chạy tệp hàng loạt hoặc thực thi dựa trên bảng điều khiển. 57 environment variable specifies the default shell. The only time you need to specify 53 on Windows is when the command you wish to execute is built into the shell (e.g. dir or copy). You do not need 53 to run a
batch file or console-based executable.Bufsize sẽ được cung cấp dưới dạng đối số tương ứng cho hàm 60 khi tạo các đối tượng tệp ống stdin/stdout/stderr:
Đã thay đổi trong phiên bản 3.3.1: Bufsize hiện có mặc định thành -1 để bật bộ đệm theo mặc định để phù hợp với hành vi mà hầu hết mã mong đợi. Trong các phiên bản trước Python 3.2.4 và 3.3.1, nó được mặc định không chính xác là 61 which was unbuffered and allowed short reads. This was unintentional and
did not match the behavior of Python 2 as most code expected.Đối số thực thi chỉ định một chương trình thay thế để thực thi. Nó rất hiếm khi cần thiết. Khi 45, thực thi có thể thay thế chương trình để thực hiện được chỉ định bởi Args. Tuy nhiên, ARG ban đầu vẫn được chuyển cho chương trình. Hầu hết các chương trình coi chương trình được ARG chỉ định là tên lệnh, sau đó có thể khác với chương trình thực sự được thực hiện. Trên Posix, tên ARGS trở thành tên hiển thị cho các tiện ích có thể thực thi như PS. Nếu 53, trên POSIX đối số thực thi chỉ định một shell thay thế cho mặc định 54.ps. If 53, on POSIX the executable argument specifies a replacement shell for the default 54.Thay đổi trong phiên bản 3.6: Tham số thực thi chấp nhận một đối tượng giống như đường dẫn trên POSIX.executable parameter accepts a path-like object on POSIX. Thay đổi trong phiên bản 3.8: Tham số thực thi chấp nhận một byte và đối tượng giống như đường dẫn trên Windows.executable parameter accepts a bytes and path-like object on Windows. Stdin, stdout và stderr chỉ định đầu vào tiêu chuẩn của chương trình, đầu ra tiêu chuẩn và tay cầm tệp tiêu chuẩn, tương ứng. Các giá trị hợp lệ là 05, 06, một bộ mô tả tệp hiện có (một số nguyên dương), một đối tượng tệp hiện có với bộ mô tả tệp hợp lệ và 6. 05 chỉ ra rằng một đường ống mới cho trẻ nên được tạo ra. 06 chỉ ra rằng tệp đặc biệt >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')3 sẽ được sử dụng. Với các cài đặt mặc định của 6, sẽ không có sự chuyển hướng nào xảy ra; Tay cầm tập tin trẻ con sẽ được kế thừa từ cha mẹ. Ngoài ra, STDERR có thể là 12, điều này chỉ ra rằng dữ liệu STDERR từ các ứng dụng phải được ghi vào cùng một xử lý tệp như đối với stdout.file object with a valid file descriptor, and 6. 05 indicates that a
new pipe to the child should be created. 06 indicates that the special file >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')3 will be used. With the default settings of 6, no redirection will occur; the child’s file handles will be inherited from the parent. Additionally, stderr can be 12, which indicates that the stderr data from the applications should be captured into the same file handle as for stdout.Nếu preexec_fn được đặt thành một đối tượng có thể gọi được, đối tượng này sẽ được gọi trong quá trình con ngay trước khi đứa trẻ được thực thi. (Chỉ Posix) Cảnh báo Tham số PEREXEC_FN không an toàn để sử dụng với sự hiện diện của các luồng trong ứng dụng của bạn. Quá trình trẻ em có thể bế tắc trước khi EXEC được gọi. Ghi chú Nếu bạn cần sửa đổi môi trường cho đứa trẻ sử dụng tham số env thay vì thực hiện nó trong preexec_fn. Các tham số start_new_session và process_group sẽ thay thế mã bằng cách sử dụng preexec_fn để gọi 76 hoặc 77 ở trẻ.Đã thay đổi trong phiên bản 3.8: Tham số PreExec_FN không còn được hỗ trợ trong các phần phụ. Việc sử dụng tham số trong trình điều khiển phụ tăng 78. The new restriction may affect applications that are deployed in
mod_wsgi, uWSGI, and other embedded environments.Nếu Close_FDS là đúng, tất cả các mô tả tệp ngoại trừ 61, 62 và 81 sẽ được đóng trước khi quá trình con được thực thi. Mặt khác, khi Close_FDS là sai, các mô tả tệp tuân theo cờ di truyền của họ như được mô tả trong kế thừa của các mô tả tệp.Inheritance of File Descriptors.Trên Windows, nếu Close_FDS là đúng thì sẽ không có tay cầm nào được kế thừa bằng quy trình con trừ khi được truyền rõ ràng trong phần tử 82 của 83 hoặc theo chuyển hướng xử lý tiêu chuẩn.Đã thay đổi trong phiên bản 3.2: Mặc định cho Close_FDS đã được thay đổi từ 49 to what is described above.Đã thay đổi trong phiên bản 3.7: Trên Windows, mặc định cho Close_FDS đã được thay đổi từ 49 to 04 when redirecting
the standard handles. It’s now possible to set close_fds to 04 when redirecting the standard handles.pass_fds là một chuỗi các mô tả tệp tùy chọn để tiếp tục mở giữa cha mẹ và con cái. Cung cấp bất kỳ lực lượng pass_fds gần 04. (Chỉ Posix)Đã thay đổi trong phiên bản 3.2: Tham số pass_fds đã được thêm vào.The pass_fds parameter was added. Nếu CWD không phải là 6, chức năng sẽ thay đổi thư mục làm việc thành CWD trước khi thực hiện trẻ. CWD có thể là một chuỗi, byte hoặc đối tượng giống như đường dẫn. Trên POSIX, hàm tìm kiếm thực thi (hoặc cho mục đầu tiên trong ARGS) so với CWD nếu đường dẫn thực thi là một đường dẫn tương đối.path-like object. On POSIX, the function looks for executable (or for the first item in args) relative to
cwd if the executable path is a relative path.Thay đổi trong phiên bản 3.6: Tham số CWD chấp nhận một đối tượng giống như đường dẫn trên POSIX.cwd parameter accepts a path-like object on POSIX. Thay đổi trong phiên bản 3.7: Tham số CWD chấp nhận một đối tượng giống như đường dẫn trên Windows.cwd parameter accepts a path-like object on Windows. Thay đổi trong phiên bản 3.8: Tham số CWD chấp nhận đối tượng byte trên Windows.cwd parameter accepts a bytes object on Windows. Nếu restore_signals là đúng (mặc định), tất cả các tín hiệu mà python đã đặt thành sig_ign được khôi phục thành sig_dfl trong quy trình con trước khi thực hiện. Hiện tại điều này bao gồm các tín hiệu Sigpipe, SigXFZ và SigXFSZ. (Chỉ Posix) Đã thay đổi trong phiên bản 3.2: Restore_signals đã được thêm vào.restore_signals was added. Nếu start_new_session là đúng thì cuộc gọi hệ thống 90 sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con.Tính khả dụng: Posix: POSIX Đã thay đổi trong phiên bản 3.2: start_new_session đã được thêm vào.start_new_session was added. Nếu Process_group là một số nguyên không âm, cuộc gọi hệ thống 91 sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con.Tính khả dụng: Posix: POSIX Đã thay đổi trong phiên bản 3.2: start_new_session đã được thêm vào.process_group was added. Nếu Process_group là một số nguyên không âm, cuộc gọi hệ thống 91 sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con.Tính khả dụng: Posix: POSIX Đã thay đổi trong phiên bản 3.2: start_new_session đã được thêm vào. Nếu Process_group là một số nguyên không âm, cuộc gọi hệ thống 91 sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con.Tính khả dụng: Posix: POSIX Đã thay đổi trong phiên bản 3.2: start_new_session đã được thêm vào. Nếu Process_group là một số nguyên không âm, cuộc gọi hệ thống 91 sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con.Tính khả dụng: Posix: POSIX Đã thay đổi trong phiên bản 3.2: start_new_session đã được thêm vào. Nếu Process_group là một số nguyên không âm, cuộc gọi hệ thống 91 sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con.Tính khả dụng: Posix: POSIX Đã thay đổi trong phiên bản 3.2: start_new_session đã được thêm vào. Nếu Process_group là một số nguyên không âm, cuộc gọi hệ thống 91 sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con.Đã thay đổi trong phiên bản 3.11: Process_group đã được thêm vào. Nếu nhóm không phải là 6, cuộc gọi hệ thống setregid () sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con. Nếu giá trị được cung cấp là một chuỗi, nó sẽ được tra cứu qua 93 và giá trị trong 94 sẽ được sử dụng. Nếu giá trị là một số nguyên, nó sẽ được truyền nguyên văn. (Chỉ Posix)must include a valid 04.Mới trong phiên bản 3.9.Frequently Used Arguments. The universal_newlines argument is equivalent to text and is provided for backwards compatibility. By default, file objects are opened in binary mode. Nếu Extra_groups không phải là Nếu người dùng không phải là Nếu UMASK không âm, cuộc gọi hệ thống Umask () sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con.
Nếu env không phải là 6, thì đó phải là một ánh xạ xác định các biến môi trường cho quy trình mới; Chúng được sử dụng thay vì hành vi mặc định của việc kế thừa môi trường quy trình hiện tại. Ánh xạ này có thể được STR trên bất kỳ nền tảng hoặc byte nào cho byte trên các nền tảng POSIX giống như 8 hoặc 9.Ghi chúThe 20 parameter was added.Nếu được chỉ định, Env phải cung cấp bất kỳ biến nào cần thiết cho chương trình để thực thi. Trên Windows, để chạy tập hợp cạnh nhau, env được chỉ định phải bao gồm 04 hợp lệ. 1Nếu mã hóa hoặc lỗi được chỉ định hoặc văn bản là đúng, các đối tượng tệp stdin, stdout và stderr được mở ở chế độ văn bản với mã hóa và lỗi được chỉ định, như được mô tả ở trên trong các đối số thường được sử dụng. Đối số Universal_Newlines tương đương với văn bản và được cung cấp cho khả năng tương thích ngược. Theo mặc định, các đối tượng tệp được mở ở chế độ nhị phân.auditing event 22 with arguments 23, 24, 25, and 26. The value for 24 may be a single string or a list of strings, depending on platform.Mới trong phiên bản 3.6: Mã hóa và lỗi đã được thêm vào.Added context manager support. Mới trong phiên bản 3.7: Văn bản đã được thêm vào dưới dạng bí danh dễ đọc hơn cho Universal_Newlines.Popen destructor now emits a 28 warning if the child process is still running.Nếu được đưa ra, startupinfo sẽ là đối tượng 29 in some cases for better performance. On Windows Subsystem for Linux and QEMU User Emulation, Popen constructor using
29 no longer raise an exception on errors like missing program, but the child process fails with a non-zero >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')0. Ngoại lệ haCác trường hợp ngoại lệ được nêu ra trong quy trình trẻ em, trước khi chương trình mới bắt đầu thực thi, sẽ được nuôi dưỡng lại trong cha mẹ. Ngoại lệ phổ biến nhất được nâng lên là 32. Điều này xảy ra, ví dụ, khi cố gắng thực thi một tệp không tồn tại. Các ứng dụng nên chuẩn bị cho các ngoại lệ 32. Lưu ý rằng, khi 53, 32 sẽ được con nuôi chỉ khi không tìm thấy vỏ được chọn. Để xác định xem shell không tìm thấy ứng dụng được yêu cầu, cần phải kiểm tra mã trả về hoặc đầu ra từ quy trình con.A 36 sẽ được nâng lên nếu 1 được gọi với các đối số không hợp lệ.>>> import shlex, subprocess >>> command_line = input() /bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'" >>> args = shlex.split(command_line) >>> print(args) ['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"] >>> p = subprocess.Popen(args) # Success!3 và >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')9 sẽ tăng 4 nếu quá trình được gọi là trả lại mã trả lại khác không.Tất cả các chức năng và phương thức chấp nhận tham số thời gian chờ, chẳng hạn như 41 và 9 sẽ tăng 0 nếu thời gian chờ hết hạn trước khi quá trình thoát ra.
Các ngoại lệ được xác định trong mô -đun này tất cả kế thừa từ >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')7. Cân nhắc về Bảo mật¶Không giống như một số chức năng popen khác, việc triển khai này sẽ không bao giờ hoàn toàn gọi một shell hệ thống. Điều này có nghĩa là tất cả các nhân vật, bao gồm cả các metacharacters shell, có thể được truyền một cách an toàn cho các quá trình trẻ em. Nếu vỏ được gọi rõ ràng, thông qua 53, thì trách nhiệm của ứng dụng là đảm bảo rằng tất cả các chất trắng và metacharacters được trích dẫn một cách thích hợp để tránh các lỗ hổng tiêm vỏ. Trên một số nền tảng, có thể sử dụng 46 cho việc trốn thoát này.some platforms, it is possible to use 46 for this escaping.Đối tượng PopenCác thể hiện của lớp 1 có các phương thức sau: Popen.poll () ¶poll()¶Kiểm tra nếu quá trình trẻ em đã chấm dứt. Đặt và trả về thuộc tính >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')0. Nếu không, trả về 6.
Popen.wait (thời gian chờ = không) ¶wait(timeout=None)¶Chờ quá trình trẻ em chấm dứt. Đặt và trả về thuộc tính >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')0. Nếu quá trình không chấm dứt sau thời gian chờ giây, hãy tăng ngoại lệ 0. Nó là an toàn để bắt được ngoại lệ này và thử lại sự chờ đợi.Ghi chú Điều này sẽ bế tắc khi sử dụng 5 hoặc 6 và quy trình con tạo ra đủ đầu ra cho một đường ống sao cho nó chặn chờ bộ đệm ống OS chấp nhận thêm dữ liệu. Sử dụng 9 khi sử dụng đường ống để tránh điều đó.Thay đổi trong phiên bản 3.3: Thời gian chờ đã được thêm vào.timeout was added. Popen.Commenticate (input = none, timeout = none) ¶communicate(input=None, timeout=None)¶Tương tác với quy trình: Gửi dữ liệu đến Stdin. Đọc dữ liệu từ stdout và stderr, cho đến khi đạt được phần cuối. Đợi quá trình chấm dứt và đặt thuộc tính >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')0. Đối số đầu vào tùy chọn phải là dữ liệu được gửi đến quy trình con hoặc 6, nếu không có dữ liệu nào được gửi cho trẻ. Nếu các luồng được mở ở chế độ văn bản, đầu vào phải là một chuỗi. Nếu không, nó phải là byte. 57 Trả về một tuple 58. Dữ liệu sẽ là chuỗi nếu các luồng được mở ở chế độ văn bản; Nếu không, byte.Lưu ý rằng nếu bạn muốn gửi dữ liệu đến quy trình STDIN, bạn cần tạo đối tượng popen bằng 3. Tương tự, để có được bất cứ thứ gì khác ngoài 6 trong kết quả, bạn cũng cần cung cấp cho 5 và/hoặc 6.Nếu quá trình không chấm dứt sau khi hết thời gian, một ngoại lệ 0 sẽ được nâng lên. Bắt được ngoại lệ này và giao tiếp thử lại sẽ không mất bất kỳ đầu ra nào.Quá trình trẻ em không bị giết nếu hết thời gian chờ, vì vậy để dọn dẹp đúng một ứng dụng được cư xử tốt nên tiêu diệt quy trình trẻ em và kết thúc giao tiếp: 2Ghi chú Điều này sẽ bế tắc khi sử dụng 5 hoặc 6 và quy trình con tạo ra đủ đầu ra cho một đường ống sao cho nó chặn chờ bộ đệm ống OS chấp nhận thêm dữ liệu. Sử dụng 9 khi sử dụng đường ống để tránh điều đó.Thay đổi trong phiên bản 3.3: Thời gian chờ đã được thêm vào.timeout was added. Popen.Commenticate (input = none, timeout = none) ¶send_signal(signal)¶Tương tác với quy trình: Gửi dữ liệu đến Stdin. Đọc dữ liệu từ stdout và stderr, cho đến khi đạt được phần cuối. Đợi quá trình chấm dứt và đặt thuộc tính >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')0. Đối số đầu vào tùy chọn phải là dữ liệu được gửi đến quy trình con hoặc 6, nếu không có dữ liệu nào được gửi cho trẻ. Nếu các luồng được mở ở chế độ văn bản, đầu vào phải là một chuỗi. Nếu không, nó phải là byte. 57 Trả về một tuple 58. Dữ liệu sẽ là chuỗi nếu các luồng được mở ở chế độ văn bản; Nếu không, byte.Ghi chú Điều này sẽ bế tắc khi sử dụng 5 hoặc 6 và quy trình con tạo ra đủ đầu ra cho một đường ống sao cho nó chặn chờ bộ đệm ống OS chấp nhận thêm dữ liệu. Sử dụng 9 khi sử dụng đường ống để tránh điều đó.
Thay đổi trong phiên bản 3.3: Thời gian chờ đã được thêm vào.terminate()¶Popen.Commenticate (input = none, timeout = none) ¶ Tương tác với quy trình: Gửi dữ liệu đến Stdin. Đọc dữ liệu từ stdout và stderr, cho đến khi đạt được phần cuối. Đợi quá trình chấm dứt và đặt thuộc tính>>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')0. Đối số đầu vào tùy chọn phải là dữ liệu được gửi đến quy trình con hoặc 6, nếu không có dữ liệu nào được gửi cho trẻ. Nếu các luồng được mở ở chế độ văn bản, đầu vào phải là một chuỗi. Nếu không, nó phải là byte.kill()¶ 57 Trả về một tuple 58. Dữ liệu sẽ là chuỗi nếu các luồng được mở ở chế độ văn bản; Nếu không, byte.Lưu ý rằng nếu bạn muốn gửi dữ liệu đến quy trình STDIN, bạn cần tạo đối tượng popen bằng 3. Tương tự, để có được bất cứ thứ gì khác ngoài 6 trong kết quả, bạn cũng cần cung cấp cho 5 và/hoặc 6. Nếu quá trình không chấm dứt sau khi hết thời gian, một ngoại lệ 0 sẽ được nâng lên. Bắt được ngoại lệ này và giao tiếp thử lại sẽ không mất bất kỳ đầu ra nào.args¶Quá trình trẻ em không bị giết nếu hết thời gian chờ, vì vậy để dọn dẹp đúng một ứng dụng được cư xử tốt nên tiêu diệt quy trình trẻ em và kết thúc giao tiếp: Dữ liệu đọc được đệm trong bộ nhớ, vì vậy không sử dụng phương pháp này nếu kích thước dữ liệu lớn hoặc không giới hạn. Popen.send_signal (tín hiệu) ¶stdin¶Gửi tín hiệu tín hiệu cho trẻ. Popen.stdout¶stdout¶Nếu đối số stdout là 05, thuộc tính này là một đối tượng luồng có thể đọc được được trả về bởi 60. Đọc từ luồng cung cấp đầu ra từ quá trình trẻ em. Nếu các đối số mã hóa hoặc lỗi được chỉ định hoặc đối số Universal_Newlines là 04, luồng là luồng văn bản, nếu không thì đó là luồng byte. Nếu đối số stdout không phải là 05, thuộc tính này là 6.
Popen.stderr¶stderr¶Nếu đối số STDERR là 05, thuộc tính này là một đối tượng luồng có thể đọc được được trả về bởi 60. Đọc từ luồng cung cấp đầu ra lỗi từ quá trình con. Nếu các đối số mã hóa hoặc lỗi được chỉ định hoặc đối số Universal_Newlines là 04, luồng là luồng văn bản, nếu không thì đó là luồng byte. Nếu đối số Stderr không phải là 05, thuộc tính này là 6. Popen.pid¶pid¶ID quy trình của quá trình trẻ em. Lưu ý rằng nếu bạn đặt đối số shell thành 04, đây là ID quy trình của vỏ được sinh ra. Popen.returncode¶returncode¶Mã trả về con, được đặt bởi 86 và 87 (và gián tiếp bởi 57). Giá trị 6 chỉ ra rằng quá trình này đã chấm dứt.Giá trị âm 1 chỉ ra rằng đứa trẻ bị chấm dứt bởi tín hiệu 2 (chỉ POSIX).Windows Popen Helpers¶Lớp 05 và các hằng số sau đây chỉ có sẵn trên Windows. classSubProcess.StartUpInfo (*, dwflags = 0, hstdinput = none, hstDoutput = none, hstderror = none, wshowWindow = 0, lpattributelist = none)subprocess.STARTUPINFO(*,
dwFlags=0, hStdInput=None, hStdOutput=None, hStdError=None,
wShowWindow=0, lpAttributeList=None)¶Hỗ trợ một phần của cấu trúc Windows StartupInfo được sử dụng để tạo 1. Các thuộc tính sau đây có thể được đặt bằng cách truyền chúng dưới dạng đối số chỉ từ khóa.Thay đổi trong phiên bản 3.7: Hỗ trợ đối số chỉ từ khóa đã được thêm vào.Keyword-only argument support was added. dwflags¶¶Một trường bit xác định xem các thuộc tính 05 nhất định có được sử dụng khi quá trình tạo ra một cửa sổ. 3 hstdinput¶¶Nếu 95 chỉ định 96, thuộc tính này là tay cầm đầu vào tiêu chuẩn cho quy trình. Nếu 96 không được chỉ định, mặc định cho đầu vào tiêu chuẩn là bộ đệm bàn phím. Hstdoutput¶¶Nếu 95 chỉ định 96, thuộc tính này là tay cầm đầu ra tiêu chuẩn cho quy trình. Mặt khác, thuộc tính này bị bỏ qua và mặc định cho đầu ra tiêu chuẩn là bộ đệm cửa sổ console.
hstderror¶¶Nếu 95 Chỉ định 96, thuộc tính này là xử lý lỗi tiêu chuẩn cho quy trình. Mặt khác, thuộc tính này bị bỏ qua và mặc định cho lỗi tiêu chuẩn là bộ đệm cửa sổ console.
wshowwindow¶¶Nếu 95 chỉ định 03, thuộc tính này có thể là bất kỳ giá trị nào có thể được chỉ định trong tham số 04 cho hàm showWindow, ngoại trừ 05. Nếu không, thuộc tính này bị bỏ qua. 06 được cung cấp cho thuộc tính này. Nó được sử dụng khi 1 được gọi với 53.
lpattributelist¶¶Một từ điển các thuộc tính bổ sung để tạo quy trình như được đưa ra trong 09, xem UpdateProcThreadAttribution.Các thuộc tính được hỗ trợ: handle_listTrình tự của tay cầm sẽ được kế thừa. Close_fds phải đúng nếu không trống. Các tay cầm phải tạm thời được kế thừa bằng 10 khi được chuyển cho hàm tạo 1, nếu không 32 sẽ được nâng lên với lỗi Windows 13 (87).Cảnh báo Trong một quy trình đa luồng, sử dụng thận trọng để tránh các tay cầm bị rò rỉ có thể di truyền khi kết hợp tính năng này với các cuộc gọi đồng thời đến các chức năng tạo quy trình khác kế thừa tất cả các tay cầm như 14. Điều này cũng áp dụng cho chuyển hướng xử lý tiêu chuẩn, tạm thời tạo ra tay cầm có thể thừa kế.Mới trong phiên bản 3.7. Hằng số cửa sổ hằng sốMô -đun 5 hiển thị các hằng số sau.
SubProcess.std_input_handle¶STD_INPUT_HANDLE¶Thiết bị đầu vào tiêu chuẩn. Ban đầu, đây là bộ đệm đầu vào bảng điều khiển, 16.
Subprocess.std_output_handle¶STD_OUTPUT_HANDLE¶Thiết bị đầu ra tiêu chuẩn. Ban đầu, đây là bộ đệm màn hình bảng điều khiển hoạt động, 17.
SubProcess.std_error_handle¶STD_ERROR_HANDLE¶Thiết bị lỗi tiêu chuẩn. Ban đầu, đây là bộ đệm màn hình bảng điều khiển hoạt động, 17.
quá trình phụ.sw_hide¶SW_HIDE¶Giấu cửa sổ. Một cửa sổ khác sẽ được kích hoạt. phụSTARTF_USESTDHANDLES¶Chỉ định rằng các thuộc tính 19, 20 và 21 chứa thông tin bổ sung.
SubProcess.startf_useshowwindow¶STARTF_USESHOWWINDOW¶Chỉ định rằng thuộc tính 22 chứa thông tin bổ sung. SubProcess.Create_New_Console¶CREATE_NEW_CONSOLE¶Quá trình mới có một giao diện điều khiển mới, thay vì kế thừa bảng điều khiển cha mẹ của nó (mặc định). SubProcess.Create_New_Process_group¶CREATE_NEW_PROCESS_GROUP¶Tham số 1 24 để chỉ định rằng một nhóm quy trình mới sẽ được tạo. Cờ này là cần thiết để sử dụng 25 trên quy trình con.Cờ này bị bỏ qua nếu 07 được chỉ định. phụABOVE_NORMAL_PRIORITY_CLASS¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên trên trung bình.Mới trong phiên bản 3.7. phụBELOW_NORMAL_PRIORITY_CLASS¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình.Mới trong phiên bản 3.7. phụHIGH_PRIORITY_CLASS¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình.Mới trong phiên bản 3.7. phụIDLE_PRIORITY_CLASS¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình.Mới trong phiên bản 3.7. phụNORMAL_PRIORITY_CLASS¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình.Mới trong phiên bản 3.7. phụREALTIME_PRIORITY_CLASS¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình.Mới trong phiên bản 3.7. phụCREATE_NO_WINDOW¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình.Mới trong phiên bản 3.7. phụDETACHED_PROCESS¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình.Mới trong phiên bản 3.7. phụCREATE_DEFAULT_ERROR_MODE¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình.Mới trong phiên bản 3.7. phụCREATE_BREAKAWAY_FROM_JOB¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình.Mới trong phiên bản 3.7. phụTham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên dưới mức trung bình. phụcall(args, *, stdin=None,
stdout=None, stderr=None, shell=False, cwd=None, timeout=None,
**other_popen_kwargs)¶Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên cao.
phụ Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên không hoạt động (thấp nhất).phụ Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên bình thường. (mặc định)phụ Tham số Tham số 1 24 để chỉ định rằng một quy trình mới sẽ không tạo cửa sổ.phụ Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên không hoạt động (thấp nhất).phụ Tham số 1 24 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên bình thường. (mặc định)phụ Tham số Tham số 1 24 để chỉ định rằng một quy trình mới sẽ không tạo cửa sổ.quá trình phụ .detached_process¶ Điều này tương đương với: 4Các đối số hiển thị ở trên chỉ là một số thông thường. Chữ ký chức năng đầy đủ phần lớn giống như 0 - hầu hết các đối số được truyền trực tiếp qua giao diện đó. Tồn tại một độ lệch API so với hành vi 0: vượt qua 69 sẽ hoạt động giống như 70 (hoặc 71, tùy thuộc vào các đối số khác) thay vì sử dụng xử lý tệp đầu vào tiêu chuẩn của cha mẹ.Theo mặc định, hàm này sẽ trả về dữ liệu dưới dạng byte được mã hóa. Mã hóa thực tế của dữ liệu đầu ra có thể phụ thuộc vào lệnh được gọi, do đó việc giải mã thành văn bản thường sẽ cần được xử lý ở cấp độ ứng dụng. Hành vi này có thể bị ghi đè bằng cách đặt văn bản, mã hóa, lỗi hoặc Universal_Newlines thành 04 như được mô tả trong các đối số được sử dụng thường xuyên và 0.Frequently Used Arguments and 0.Để nắm bắt lỗi tiêu chuẩn trong kết quả, hãy sử dụng 5: 5Mới trong phiên bản 3.1. Thay đổi trong phiên bản 3.3: Thời gian chờ đã được thêm vào.timeout was added. Thay đổi trong phiên bản 3.4: Hỗ trợ cho đối số từ khóa đầu vào đã được thêm vào.Support for the input keyword argument was added. Thay đổi trong phiên bản 3.6: Mã hóa và lỗi đã được thêm vào. Xem 0 for details.Mới trong phiên bản 3.7: Văn bản đã được thêm vào dưới dạng bí danh dễ đọc hơn cho Universal_Newlines.text was added as a more readable alias for universal_newlines. Thay thế các chức năng cũ bằng mô -đun pidStr = str(pid) commandArguments = ['ps', '-p', pidStr ] 5Trong phần này, A A trở thành B Bi có nghĩa là B có thể được sử dụng thay thế cho a. Ghi chú Tất cả các chức năng của một người khác trong phần này đều không thành công (ít nhiều) nếu không thể tìm thấy chương trình thực hiện; Thay vào đó, các thay thế của B Biêu tăng 32 thay thế.Ngoài ra, việc thay thế sử dụng >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')9 sẽ thất bại với 4 nếu thao tác được yêu cầu tạo mã trả lại khác không. Đầu ra vẫn có sẵn dưới dạng thuộc tính 66 của ngoại lệ được nâng lên.Trong các ví dụ sau, chúng tôi giả định rằng các chức năng liên quan đã được nhập từ mô -đun 5.Thay thế /Bin /SH Shell Lệnh thay thế SHELL/bin/sh shell command substitution¶becomes: 6Thay thế đường ống shell 7becomes: 8Cuộc gọi 82 sau khi bắt đầu P2 rất quan trọng để P1 nhận được sigpipe nếu P2 thoát trước P1.Ngoài ra, đối với đầu vào đáng tin cậy, hỗ trợ đường ống riêng Shell Shell vẫn có thể được sử dụng trực tiếp: 7becomes: 0Thay thế ________ 314¶ 1Notes:
Một ví dụ thực tế hơn sẽ trông như thế này: 2Thay thế cho gia đình ____388Ví dụ P_Nowait: 3Ví dụ P_Wait: 4Ví dụ về vector: 5Ví dụ về môi trường: 6Thay thế pidStr = str(pid) commandArguments = ['ps', '-p', pidStr ] 89, pidStr = str(pid) commandArguments = ['ps', '-p', pidStr ] 90, ________ 391¶ 7 8 9Xử lý mã trả lại dịch như sau: 0Thay thế các chức năng từ mô -đun pidStr = str(pid) commandArguments = ['ps', '-p', pidStr ] 92Ghi chú Tất cả các chức năng của một người khác trong phần này đều không thành công (ít nhiều) nếu không thể tìm thấy chương trình thực hiện; Thay vào đó, các thay thế của B Biêu tăng 32 thay thế. 1 2Ngoài ra, việc thay thế sử dụng >>> subprocess.run(["ls", "-l"]) # doesn't capture output CompletedProcess(args=['ls', '-l'], returncode=0) >>> subprocess.run("exit 1", shell=True, check=True) Traceback (most recent call last): ... subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1 >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True) CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0, stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')9 sẽ thất bại với 4 nếu thao tác được yêu cầu tạo mã trả lại khác không. Đầu ra vẫn có sẵn dưới dạng thuộc tính 66 của ngoại lệ được nâng lên.
Ngoài ra, đối với đầu vào đáng tin cậy, hỗ trợ đường ống riêng Shell Shell vẫn có thể được sử dụng trực tiếp:Thay thế ________ 314¶ Gọi chương trình thông qua vỏ thường không được yêu cầu.getstatusoutput(cmd, *, encoding=None, errors=None)¶Giá trị trả về 41 được mã hóa khác với giá trị 14.Hàm 14 bỏ qua các tín hiệu sigint và sigquit trong khi lệnh đang chạy, nhưng người gọi phải làm điều này một cách riêng biệt khi sử dụng mô -đun 5.Frequently Used Arguments for more details.Một ví dụ thực tế hơn sẽ trông như thế này: 3Thay thế cho gia đình ____388: Unix, Windows. Ví dụ P_Nowait:Windows support was added. Ví dụ P_Wait: Ví dụ về vector:Added encoding and errors arguments. Ví dụ về môi trường:getoutput(cmd, *, encoding=None, errors=None)¶Trả về đầu ra (stdout và stderr) của việc thực thi cmd trong shell. Giống như 06, ngoại trừ mã thoát bị bỏ qua và giá trị trả về là một chuỗi chứa đầu ra của lệnh. Thí dụ: 4Tính khả dụng: UNIX, Windows.: Unix, Windows. Đã thay đổi trong phiên bản 3.3.4: được thêm hỗ trợ WindowsWindows support added Mới trong phiên bản 3.11: Đã thêm các đối số mã hóa và lỗi.Added encoding and errors arguments. Notes¶Chuyển đổi một chuỗi đối số thành một chuỗi trên Windows¶Trên Windows, một chuỗi Args được chuyển đổi thành một chuỗi có thể được phân tích cú pháp bằng các quy tắc sau (tương ứng với các quy tắc được sử dụng bởi thời gian chạy MS C):
Xem thêm 07Mô -đun cung cấp chức năng cho các dòng lệnh phân tích và thoát. Vô hiệu hóa việc sử dụng try: foundRunningProcess = subprocess.check_output(argumentsArray, **kwargs) return True except Exception as err: return False 08 hoặc ________ 409¶Trên Linux, 5 mặc định sử dụng hệ thống 08 gọi nội bộ khi an toàn để làm như vậy thay vì 12. Điều này cải thiện đáng kể hiệu suất.Nếu bạn từng gặp phải một tình huống được cho là rất bất thường khi bạn cần ngăn chặn 08 được Python sử dụng, bạn có thể đặt thuộc tính 14 thành giá trị sai.
Cài đặt Điều này không có tác động đến việc sử dụng 09 có thể sử dụng 08 trong nội bộ trong quá trình triển khai LIBC của nó. Có một thuộc tính 17 tương tự nếu bạn cần ngăn chặn việc sử dụng điều đó.
Có thể đặt những thứ này thành sai trên bất kỳ phiên bản Python nào. Chúng sẽ không có tác dụng đối với các phiên bản cũ hơn khi không được hỗ trợ. Không cho rằng các thuộc tính có sẵn để đọc. Mặc dù tên của họ, một giá trị thực sự không chỉ ra rằng hàm tương ứng sẽ được sử dụng, chỉ có điều đó có thể. Vui lòng giải quyết các vấn đề bất cứ khi nào bạn phải sử dụng các nút riêng này với cách tái tạo vấn đề bạn đang thấy. Liên kết đến vấn đề đó từ một bình luận trong mã của bạn. Mới trong phiên bản 3.8: 18Mới trong phiên bản 3.11: 19Popen Python là gì?Phương thức Python popen () mở một đường ống đến hoặc từ lệnh. Giá trị trả về là một đối tượng tệp mở được kết nối với đường ống, có thể được đọc hoặc viết tùy thuộc vào liệu chế độ là 'r' (mặc định) hoặc 'w'. Đối số bufsize có cùng ý nghĩa như trong hàm open ().opens a pipe to or from command. The return value is an open file object connected to the pipe, which can be read or written depending on whether mode is 'r' (default) or 'w'. The bufsize argument has the same meaning as in open() function.
Kiểm tra đúng trong quá trình phụ là gì?Với kiểm tra = true, nó sẽ thất bại nếu lệnh bạn chạy không thành công.Với stdout = quy trình con.Ống nó sẽ nắm bắt đầu ra của lệnh.it will fail if the command you ran failed. With stdout=subprocess. PIPE it will capture the command's output.
Python phụ Popen trở lại là gì?Hàm popen Hàm sẽ trả một con trỏ vào một luồng có thể được sử dụng để đọc từ hoặc ghi vào đường ống trong khi cũng tạo một đường ống giữa ứng dụng gọi và lệnh được thực thi.Ngay sau khi bắt đầu, hàm popen trả về dữ liệu và nó không chờ đợi quá trình phụ kết thúc.a pointer to a stream that may be used to read from or write to the pipe while also creating a pipe between the calling application and the executed command. Immediately after starting, the Popen function returns data, and it does not wait for the subprocess to finish.
Popen phụ là gì?Mô -đun phụ Xác định một lớp, popen và một vài hàm bao bọc sử dụng lớp đó.Hàm tạo cho popen có các đối số để thiết lập quy trình mới để cha mẹ có thể giao tiếp với nó thông qua các đường ống.Nó cung cấp tất cả các chức năng của các mô -đun và chức năng khác mà nó thay thế, và nhiều hơn nữa.. The constructor for Popen takes arguments to set up the new process so the parent can communicate with it via pipes. It provides all of the functionality of the other modules and functions it replaces, and more. |