Hướng dẫn how do i run a subprocess in python? - làm cách nào để chạy một quy trình con trong python?

Mã nguồn: lib/sub -crocess.py Lib/subprocess.py

Show

Mô -đun

>>> 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!
8 cho phép bạn sinh ra các quy trình mới, kết nối với đường ống đầu vào/đầu ra/lỗi của chúng và có được mã trả lại của chúng. Mô -đun này dự định thay thế một số mô -đun và chức năng cũ hơn:

Thông tin về cách mô -đun

>>> 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!
8 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

Sử dụng mô -đun >>> 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! 8

Cách tiếp cận được đề xuất để gọi các quy trình con là sử dụng hàm

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1 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
Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 cơ bản có thể được sử dụng trực tiếp.

________ 33 ________ 34 (args, *, stdin = none, input = none, stdout = none, stderr = none, capture_output = false text = none(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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
5.

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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 - 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
Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 bên trong được tự động tạo bằng
Popen(['/bin/sh', '-c', args[0], args[1], ...])
8 và
Popen(['/bin/sh', '-c', args[0], args[1], ...])
9. 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
Popen(['/bin/sh', '-c', args[0], args[1], ...])
8 và
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
1 thay vì Capture_output.

Đối số thời gian chờ được chuyển đến

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
2. 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ệ
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
3 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 đến

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
2 và do đó cho quá trình phụ 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
Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 bên trong được tự động tạo bằng
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
6 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ệ

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
7 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

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
8. Đố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à

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, 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
Popen(['/bin/sh', '-c', args[0], args[1], ...])
2.

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.

Lớp ________ 33 ________ 52¶

Giá trị trả về từ

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1, đại diện cho một quá trình đã kết thúc.

________ 54¶

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.

________ 55¶

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

proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()
6 chỉ ra rằng đứa trẻ bị chấm dứt bởi tín hiệu
proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()
7 (chỉ POSIX).

________ 58¶

Đã bắt được stdout từ quá trình trẻ em. Trình tự byte hoặc chuỗi nếu

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1 được gọi với mã hóa, lỗi hoặc văn bản = true.
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 nếu stdout không bị bắt.

Nếu bạn chạy quy trình với

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
1, stdout và stderr sẽ được kết hợp trong thuộc tính này và
si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
2 sẽ là
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9.

________ 64¶

Đã bắt Stderr từ quá trình trẻ em. Trình tự byte hoặc chuỗi nếu

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1 được gọi với mã hóa, lỗi hoặc văn bản = true.
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 Nếu Stderr không bị bắt.

________ 67 ()()

Nếu

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
8 không khác, hãy tăng
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
7.

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ỗi

Đã 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.

Lớp ________ 33 ________ 52¶

Giá trị trả về từ
Popen(['/bin/sh', '-c', args[0], args[1], ...])
1, đại diện cho một quá trình đã kết thúc.

________ 54¶

________ 33 ________ 79¶

Giá trị đặc biệt có thể được sử dụng làm đối số STDERR thành

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 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ệ ________ 33 ________ 82¶

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ệ ________ 33 ________ 84¶

Lớp con của

>>> subprocess.check_output(
...     "ls non_existent_file; exit 0",
...     stderr=subprocess.STDOUT,
...     shell=True)
'ls: non_existent_file: No such file or directory\n'
5, được tăng lên khi hết thời gian chờ trong khi chờ đợi một quá trình trẻ em.

________ 86¶

Lệnh được sử dụng để sinh ra quá trình trẻ em.

________ 87¶

Thời gian chờ trong giây.

________ 88¶

Đầu ra của quá trình con nếu nó bị bắt bởi

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1 hoặc
output = check_output(["mycmd", "myarg"])
0. Nếu không,
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9. Đây luôn là
output = check_output(["mycmd", "myarg"])
2 khi bất kỳ đầu ra nào được ghi lại bất kể cài đặt
output = check_output(["mycmd", "myarg"])
3. Nó có thể vẫn còn
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 thay vì
output = check_output(["mycmd", "myarg"])
5 khi không quan sát thấy đầu ra.

________ 58¶

Bí danh cho đầu ra, để đối xứng với

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
2.

________ 64¶

Đầu ra Stderr của quá trình con nếu nó bị bắt bởi

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1. Nếu không,
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9. Đây luôn là
output = check_output(["mycmd", "myarg"])
2 khi đầu ra Stderr được ghi lại bất kể cài đặt
output = check_output(["mycmd", "myarg"])
3. Nó có thể vẫn còn
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 thay vì
output = check_output(["mycmd", "myarg"])
5 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ệ ________ 33 ________ 84¶stdout and stderr attributes added

Lớp con của
>>> subprocess.check_output(
...     "ls non_existent_file; exit 0",
...     stderr=subprocess.STDOUT,
...     shell=True)
'ls: non_existent_file: No such file or directory\n'
5, được tăng lên khi hết thời gian chờ trong khi chờ đợi một quá trình trẻ em.

________ 86¶

Lệnh được sử dụng để sinh ra quá trình trẻ em.

________ 87¶

________ 86¶

Lệnh được sử dụng để sinh ra quá trình trẻ em.

________ 88¶

Đầu ra của quá trình con nếu nó bị bắt bởi

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1 hoặc
output = check_output(["mycmd", "myarg"])
0. Nếu không,
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9. Đây luôn là
output = check_output(["mycmd", "myarg"])
2 khi bất kỳ đầu ra nào được ghi lại bất kể cài đặt
output = check_output(["mycmd", "myarg"])
3. Nó có thể vẫn còn
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 thay vì
output = check_output(["mycmd", "myarg"])
5 khi không quan sát thấy đầu ra.

________ 58¶

Bí danh cho đầu ra, để đối xứng với

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
2.

________ 64¶

Đầu ra Stderr của quá trình con nếu nó bị bắt bởi

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1. Nếu không,
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9. Đây luôn là
output = check_output(["mycmd", "myarg"])
2 khi đầu ra Stderr được ghi lại bất kể cài đặt
output = check_output(["mycmd", "myarg"])
3. Nó có thể vẫn còn
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 thay vì
output = check_output(["mycmd", "myarg"])
5 khi không có đầu ra STDERR nào được quan sát.

Ngoại lệ ________ 33 ________ 84¶stdout and stderr attributes added

Lớp con của >>> subprocess.check_output( ... "ls non_existent_file; exit 0", ... stderr=subprocess.STDOUT, ... shell=True) 'ls: non_existent_file: No such file or directory\n' 5, được tăng lên khi hết thời gian chờ trong khi chờ đợi một quá trình trẻ em.

________ 86¶

Lệnh được sử dụng để sinh ra quá trình trẻ em.

________ 87¶

Thời gian chờ trong giây.

________ 88¶

Đầu ra của quá trình con nếu nó bị bắt bởi

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1 hoặc
output = check_output(["mycmd", "myarg"])
0. Nếu không,
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9. Đây luôn là
output = check_output(["mycmd", "myarg"])
2 khi bất kỳ đầu ra nào được ghi lại bất kể cài đặt
output = check_output(["mycmd", "myarg"])
3. Nó có thể vẫn còn
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 thay vì
output = check_output(["mycmd", "myarg"])
5 khi không quan sát thấy đầu ra.

________ 58¶Added encoding and errors parameters.

Bí danh cho đầu ra, để đối xứng với

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
2.Added the text parameter as an alias for universal_newlines.

________ 64¶

Đã thay đổi trong phiên bản 3.3: Khi Universal_Newlines là

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24, lớp sử dụng mã hóa
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
48 thay vì
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
49. Xem lớp
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
8 để biết thêm thông tin về thay đổi này.When universal_newlines is
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24, the class uses the encoding
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
48 instead of
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
49. See the
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
8 class for more information on this change.

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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2.

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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2. 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.

Lớp ________ 33 ________ 154 (args, bufsize =- 1, thực thi = none, stdin = none, stdout = none, stderr = none startupInfo = none, creationflags = 0, restore_signals = true, start_new_session = false, pass_fds = (), *, nhóm = none Không, đường ống =- 1) ¶(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)

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ư ____ 155 để thực hiện chương trình trẻ em. Trên Windows, lớp sử dụng chức năng Windows

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
56. Các đối số cho
Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
58, hãy sử dụng
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
59. Trên tất cả các nền tảng, việc vượt qua
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
60 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
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
61 để khởi chạy mô-đun đã cài đặt.
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
58, use
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
59. On all platforms, passing
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
60 is the recommended way to launch the current Python interpreter again, and use the
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
61 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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
55 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
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
58. Đối với Windows, hãy xem tài liệu của các tham số
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
64 và
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
65 của WinAPI
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
66 và lưu ý rằng khi giải quyết hoặc tìm kiếm đường dẫn thực thi với
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
67, 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
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
58. 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.

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
69 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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
56 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
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
56 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à

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
71 và một chuỗi chứa các đối tượng giống như đường dẫn trên POSIX.args parameter accepts a path-like object if shell is
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
71 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à

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
71 và một chuỗi chứa byte và các đối tượng giống như đường dẫn trên Windows.args parameter accepts a path-like object if shell is
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
71 and a sequence containing bytes and path-like objects on Windows.

Đối số shell (mặc định là

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
71) 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à
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24, 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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75, shell mặc định là
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
76. 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à,
Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 có tương đương với:

Popen(['/bin/sh', '-c', args[0], args[1], ...])

Trên Windows với

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75, biến môi trường
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
79 chỉ định shell mặc định. Lần duy nhất bạn cần chỉ định
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75 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
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75 để chạy tệp hàng loạt hoặc thực thi dựa trên bảng điều khiển.
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
79 environment variable specifies the default shell. The only time you need to specify
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75 on Windows is when the command you wish to execute is built into the shell (e.g. dir or copy). You do not need
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75 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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
82 khi tạo các đối tượng tệp ống stdin/stdout/stderr:

  • Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
    
    83 có nghĩa là không bị ảnh hưởng (đọc và ghi là một cuộc gọi hệ thống và có thể quay lại ngắn)

  • Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
    
    84 có nghĩa là bộ đệm dòng (chỉ có thể sử dụng nếu
    Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
    
    85 tức là, ở chế độ văn bản)

  • Bất kỳ giá trị dương nào khác có nghĩa là sử dụng bộ đệm có kích thước xấp xỉ

  • Bufsize âm (mặc định) có nghĩa là mặc định hệ thống của io.default_buffer_size sẽ được sử dụng.

Đã 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à

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
83 được không bị truy cập và cho phép đọc ngắn. Điều này là vô ý và không phù hợp với hành vi của Python 2 như hầu hết các mã mong đợi.bufsize now defaults to -1 to enable buffering by default to match the behavior that most code expects. In versions prior to Python 3.2.4 and 3.3.1 it incorrectly defaulted to
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
83 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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
67, 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
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75, trên POSIX đối số thực thi chỉ định một shell thay thế cho mặc định
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
76.ps. If
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75, on POSIX the executable argument specifies a replacement shell for the default
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
76.

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 được thực hiện, đầu ra tiêu chuẩn và xử lý tệp lỗi tiêu chuẩn, tương ứng. Các giá trị hợp lệ là

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
25,
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
26, 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à
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9.
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
25 chỉ ra rằng một đường ống mới cho trẻ nên được tạo ra.
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
26 chỉ ra rằng tệp đặc biệt
run(..., check=True, stdout=PIPE).stdout
3 sẽ được sử dụng. Với các cài đặt mặc định của
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, 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à
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
32, đ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 tay cầm tệp như đối với stdout.file object with a valid file descriptor, and
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9.
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
25 indicates that a new pipe to the child should be created.
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
26 indicates that the special file
run(..., check=True, stdout=PIPE).stdout
3 will be used. With the default settings of
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, no redirection will occur; the child’s file handles will be inherited from the parent. Additionally, stderr can be
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
32, 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. Nếu bạn phải sử dụng nó, hãy giữ nó tầm thường! Giảm thiểu số lượng thư viện bạn gọi vào.

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. Tham số start_new_session có thể thay thế việc sử dụng phổ biến trước đây của preexec_fn để gọi os.setsid () trong 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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
98. Hạn chế mới có thể ảnh hưởng đến các ứng dụng được triển khai trong MOD_WSGI, UWSGI và các môi trường nhúng khác.The preexec_fn parameter is no longer supported in subinterpreters. The use of the parameter in a subinterpreter raises
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
98. 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ừ

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
83,
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
84 và
>>> 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!
01 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 thông qua rõ ràng trong phần tử

>>> 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!
02 của
>>> 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!
03 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ừ

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
71 thành những gì được mô tả ở trên.The default for close_fds was changed from
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
71 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ừ

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
71 thành
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24 khi chuyển hướng tay cầm tiêu chuẩn. Bây giờ, nó có thể đặt Close_fds thành
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24 khi chuyển hướng các tay cầm tiêu chuẩn.On Windows the default for close_fds was changed from
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
71 to
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24 when redirecting the standard handles. It’s now possible to set close_fds to
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24 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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24. (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à

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, 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 setsid () sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con. (Chỉ 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 nhóm không phải là

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, 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
>>> 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!
11 và giá trị trong
>>> 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!
12 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)

Tính khả dụng: Posix: POSIX

Mới trong phiên bản 3.9.

Nếu Extra_groups không phải là

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, cuộc gọi hệ thống setgroup () sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con. Các chuỗi được cung cấp trong các nhóm thêm sẽ được tra cứu qua
>>> 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!
11 và các giá trị trong
>>> 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!
12 sẽ được sử dụng. Giá trị số nguyên sẽ được truyền nguyên văn. (Chỉ Posix)

Tính khả dụng: Posix: POSIX

Mới trong phiên bản 3.9.

Nếu Extra_groups không phải là

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, cuộc gọi hệ thống setgroup () sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con. Các chuỗi được cung cấp trong các nhóm thêm sẽ được tra cứu qua
>>> 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!
11 và các giá trị trong
>>> 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!
12 sẽ được sử dụng. Giá trị số nguyên sẽ được truyền nguyên văn. (Chỉ Posix)

Tính khả dụng: Posix: POSIX

Mới trong phiên bản 3.9.

Nếu Extra_groups không phải là

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, cuộc gọi hệ thống setgroup () sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con. Các chuỗi được cung cấp trong các nhóm thêm sẽ được tra cứu qua
>>> 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!
11 và các giá trị trong
>>> 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!
12 sẽ được sử dụng. Giá trị số nguyên sẽ được truyền nguyên văn. (Chỉ Posix)

Tính khả dụng: Posix: POSIX

Mới trong phiên bản 3.9.

Nếu Extra_groups không phải là

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, cuộc gọi hệ thống setgroup () sẽ được thực hiện trong quy trình con trước khi thực hiện quy trình con. Các chuỗi được cung cấp trong các nhóm thêm sẽ được tra cứu qua
>>> 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!
11 và các giá trị trong
>>> 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!
12 sẽ được sử dụng. Giá trị số nguyên sẽ được truyền nguyên văn. (Chỉ Posix)

Nếu người dùng không phải là

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, cuộc gọi hệ thống setreuid () 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
>>> 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!
17 và giá trị trong
>>> 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!
18 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)

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.must include a valid

>>> 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!
20.

Nếu env không phải là

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, 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.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.

Ghi chúencoding and errors were 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

>>> 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!
20 hợp lệ.text was added as a more readable alias for universal_newlines.

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 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.

  • >>> 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!
    
    23

  • >>> 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!
    
    24

  • >>> 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!
    
    25

  • >>> 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!
    
    26

  • >>> 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!
    
    27

  • >>> 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!
    
    28

  • >>> 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!
    
    29

  • >>> 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!
    
    30

  • >>> 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!
    
    31

  • >>> 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!
    
    32

  • >>> 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!
    
    33

  • >>> 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!
    
    34

Mới trong phiên bản 3.6: Mã hóa và lỗi đã được thêm vào.

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.The

>>> 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!
36 parameter was added.

Nếu được đưa ra, startupinfo sẽ là đối tượng

>>> 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!
21, được truyền đến hàm
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
66 bên dưới. Creationflags, nếu được đưa ra, có thể là một hoặc nhiều cờ sau:

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())

Các đường ống có thể được sử dụng để thay đổi kích thước của đường ống khi

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
25 được sử dụng cho stdin, stdout hoặc stderr. Kích thước của đường ống chỉ được thay đổi trên các nền tảng hỗ trợ điều này (chỉ Linux tại thời điểm viết này). Các nền tảng khác sẽ bỏ qua tham số này.auditing event
>>> 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!
38 with arguments
>>> 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!
39,
>>> 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!
40,
>>> 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!
41, and
>>> 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!
42. The value for
>>> 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!
40 may be a single string or a list of strings, depending on platform.

Mới trong phiên bản 3.10: Tham số

>>> 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!
36 đã được thêm vào.Added context manager support.

Các đối tượng popen được hỗ trợ dưới dạng các trình quản lý ngữ cảnh thông qua câu lệnh

>>> 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!
37: Khi thoát, các mô tả tệp tiêu chuẩn được đóng và quá trình được chờ đợi.Popen destructor now emits a
>>> 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!
44 warning if the child process is still running.

Popen và các chức năng khác trong mô -đun này sử dụng nó nâng cao sự kiện kiểm toán

>>> 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!
38 với các đối số
>>> 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!
39,
>>> 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!
40,
>>> 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!
41 và
>>> 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!
42. Giá trị cho
>>> 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!
40 có thể là một chuỗi hoặc một danh sách các chuỗi, tùy thuộc vào nền tảng.Popen can use
>>> 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!
45 in some cases for better performance. On Windows Subsystem for Linux and QEMU User Emulation, Popen constructor using
>>> 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!
45 no longer raise an exception on errors like missing program, but the child process fails with a non-zero
si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
8.

Ngoại lệ ha

Cá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à

>>> 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!
48. Đ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ệ
>>> 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!
48. Lưu ý rằng, khi
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75,
>>> 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!
48 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

>>> 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!
52 sẽ được nâng lên nếu
Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 được gọi với các đối số không hợp lệ.

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
08 và
output = check_output(["mycmd", "myarg"])
0 sẽ tăng
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
7 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ư

>>> 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!
57 và
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
2 sẽ tăng
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
3 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.check_output(
...     "ls non_existent_file; exit 0",
...     stderr=subprocess.STDOUT,
...     shell=True)
'ls: non_existent_file: No such file or directory\n'
5.

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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75, thì ứng dụng đó là trách nhiệm của ứng dụng để đả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
>>> 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!
62 cho việc trốn thoát này.some platforms, it is possible to use
>>> 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!
62 for this escaping.

Đối tượng Popen

Các thể hiện của lớp

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 có các phương pháp sau:

________ 264 ________ 265 ()()

Kiểm tra nếu quá trình trẻ em đã chấm dứt. Đặt và trả về thuộc tính

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
8. Nếu không, trả về
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9.

________ 264 ________ 269 (thời gian chờ = Không) ¶(timeout=None)

Chờ quá trình trẻ em chấm dứt. Đặt và trả về thuộc tính

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
8.

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ệ

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
3. 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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
8 hoặc
Popen(['/bin/sh', '-c', args[0], args[1], ...])
9 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
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
2 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.

________ 264 ________ 276 (input = none, thời gian chờ = không) ¶(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

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
8. Đố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
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, 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.

>>> 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!
79 Trả về một tuple
>>> 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!
80. 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

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
6. Tương tự, để có được bất cứ thứ gì khác ngoài
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 trong kết quả, bạn cũng cần phải cung cấp cho
Popen(['/bin/sh', '-c', args[0], args[1], ...])
8 và/hoặc
Popen(['/bin/sh', '-c', args[0], args[1], ...])
9.

Nếu quá trình không chấm dứt sau khi hết thời gian chờ, ngoại lệ

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
3 sẽ được tă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:

proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()

Ghi chú

Điều này sẽ bế tắc khi sử dụng

Popen(['/bin/sh', '-c', args[0], args[1], ...])
8 hoặc
Popen(['/bin/sh', '-c', args[0], args[1], ...])
9 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
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
2 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.

________ 264 ________ 276 (input = none, thời gian chờ = không) ¶(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

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
8. Đố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
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, 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.

>>> 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!
79 Trả về một tuple
>>> 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!
80. 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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
8 hoặc
Popen(['/bin/sh', '-c', args[0], args[1], ...])
9 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
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
2 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.()

________ 264 ________ 276 (input = none, thời gian chờ = không) ¶

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
si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
8. Đố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
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9, 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.()

>>> 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!
79 Trả về một tuple
>>> 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!
80. 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

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
6. Tương tự, để có được bất cứ thứ gì khác ngoài
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 trong kết quả, bạn cũng cần phải cung cấp cho
Popen(['/bin/sh', '-c', args[0], args[1], ...])
8 và/hoặc
Popen(['/bin/sh', '-c', args[0], args[1], ...])
9.

Nếu quá trình không chấm dứt sau khi hết thời gian chờ, ngoại lệ
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
3 sẽ được tă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:

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.

________ 264 ________ 287 (Tín hiệu) ¶

Gửi tín hiệu tín hiệu cho trẻ.

________ 264 ________ 58¶

Nếu đối số stdout là

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
25, thuộc tính này là một đối tượng luồng có thể đọc được được trả về bởi
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
82. Đọ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à
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24, 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à
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
25, thuộc tính này là
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9.

________ 264 ________ 64¶

Nếu đối số STDERR là

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
25, thuộc tính này là một đối tượng luồng có thể đọc được được trả về bởi
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
82. Đọ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à
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24, 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à
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
25, thuộc tính này là
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9.

________ 264 ________ 321¶

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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24, đây là ID quy trình của vỏ được sinh ra.

________ 264 ________ 55¶

Mã trả về con, được đặt bởi

Popen(['/bin/sh', '-c', args[0], args[1], ...])
25 và
Popen(['/bin/sh', '-c', args[0], args[1], ...])
26 (và gián tiếp bởi
>>> 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!
79). Giá trị
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
9 chỉ ra rằng quá trình này đã chấm dứt.

Giá trị âm

proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()
6 chỉ ra rằng đứa trẻ bị chấm dứt bởi tín hiệu
proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()
7 (chỉ POSIX).

Windows Popen Helpers¶

Lớp

>>> 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!
21 và các hằng số sau chỉ có sẵn trên Windows.

Lớp ________ 33 ________ 333 (*, dwflags = 0, hstdinput = none, hstDoutput = none, hstderror = none(*, 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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2. 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.

________ 335¶

Một trường bit xác định xem một số thuộc tính

>>> 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!
21 có được sử dụng khi quá trình tạo ra một cửa sổ.

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW

________ 337¶

Nếu

Popen(['/bin/sh', '-c', args[0], args[1], ...])
38 chỉ định
Popen(['/bin/sh', '-c', args[0], args[1], ...])
39, thuộc tính này là tay cầm đầu vào tiêu chuẩn cho quy trình. Nếu
Popen(['/bin/sh', '-c', args[0], args[1], ...])
39 không được chỉ định, mặc định cho đầu vào tiêu chuẩn là bộ đệm bàn phím.

________ 341¶

Nếu

Popen(['/bin/sh', '-c', args[0], args[1], ...])
38 chỉ định
Popen(['/bin/sh', '-c', args[0], args[1], ...])
39, 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.

________ 344¶

Nếu

Popen(['/bin/sh', '-c', args[0], args[1], ...])
38 chỉ định
Popen(['/bin/sh', '-c', args[0], args[1], ...])
39, 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.

________ 347¶

Nếu

Popen(['/bin/sh', '-c', args[0], args[1], ...])
38 chỉ định
Popen(['/bin/sh', '-c', args[0], args[1], ...])
49, thuộc tính này có thể là bất kỳ giá trị nào có thể được chỉ định trong tham số
Popen(['/bin/sh', '-c', args[0], args[1], ...])
50 cho hàm showWindow, ngoại trừ
Popen(['/bin/sh', '-c', args[0], args[1], ...])
51. Nếu không, thuộc tính này bị bỏ qua.

Popen(['/bin/sh', '-c', args[0], args[1], ...])
52 được cung cấp cho thuộc tính này. Nó được sử dụng khi
Popen(['/bin/sh', '-c', args[0], args[1], ...])
2 được gọi với
Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
75.

________ 355¶

Một từ điển các thuộc tính bổ sung để tạo quy trình như được đưa ra trong

Popen(['/bin/sh', '-c', args[0], args[1], ...])
56, xem UpdateProcThreadAttribution.

Các thuộc tính được hỗ trợ:

handle_list

Trì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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
57 khi được chuyển cho hàm tạo
Popen(['/bin/sh', '-c', args[0], args[1], ...])
2, nếu không
>>> 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!
48 sẽ được nâng lên với lỗi Windows
Popen(['/bin/sh', '-c', args[0], args[1], ...])
60 (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ư

Popen(['/bin/sh', '-c', args[0], args[1], ...])
61. Đ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

>>> 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!
8 hiển thị các hằng số sau.

________ 33 ________ 364¶

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,

Popen(['/bin/sh', '-c', args[0], args[1], ...])
65.

________ 33 ________ 367¶

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,

Popen(['/bin/sh', '-c', args[0], args[1], ...])
68.

________ 33 ________ 370¶

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,

Popen(['/bin/sh', '-c', args[0], args[1], ...])
68.

________ 33 ________ 373¶

Giấu cửa sổ. Một cửa sổ khác sẽ được kích hoạt.

________ 33 ________ 375¶

Chỉ định rằng các thuộc tính

Popen(['/bin/sh', '-c', args[0], args[1], ...])
76,
Popen(['/bin/sh', '-c', args[0], args[1], ...])
77 và
Popen(['/bin/sh', '-c', args[0], args[1], ...])
78 chứa thông tin bổ sung.

________ 33 ________ 380¶

Chỉ định rằng thuộc tính

Popen(['/bin/sh', '-c', args[0], args[1], ...])
81 chứa thông tin bổ sung.

________ 33 ________ 383¶

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).

________ 33 ________ 385¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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
Popen(['/bin/sh', '-c', args[0], args[1], ...])
88 trên quy trình con.

Cờ này bị bỏ qua nếu

>>> 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!
23 được chỉ định.

________ 33 ________ 391¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 395¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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.

________ 33 ________ 399¶(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, **other_popen_kwargs)

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên cao.

________ 33 ________ 403¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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).

________ 33 ________ 407¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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)

________ 33 ________ 411¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên thời gian thực. Bạn hầu như không bao giờ nên sử dụng realtime_priority_class, bởi vì điều này làm gián đoạn các luồng hệ thống quản lý đầu vào chuột, đầu vào bàn phím và xả đĩa nền. Lớp này có thể phù hợp với các ứng dụng mà nói chuyện trực tiếp với phần cứng hoặc thực hiện các tác vụ ngắn gọn nên bị gián đoạn hạn chế.timeout was added.

________ 33 ________ 415¶(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, **other_popen_kwargs)

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để chỉ định rằng một quy trình mới sẽ không tạo cửa sổ.

________ 33 ________ 403¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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).

________ 33 ________ 407¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để 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)

________ 33 ________ 411¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để chỉ định rằng một quy trình mới sẽ có mức độ ưu tiên thời gian thực. Bạn hầu như không bao giờ nên sử dụng realtime_priority_class, bởi vì điều này làm gián đoạn các luồng hệ thống quản lý đầu vào chuột, đầu vào bàn phím và xả đĩa nền. Lớp này có thể phù hợp với các ứng dụng mà nói chuyện trực tiếp với phần cứng hoặc thực hiện các tác vụ ngắn gọn nên bị gián đoạn hạn chế.timeout was added.

________ 33 ________ 415¶(args, *, stdin=None, stderr=None, shell=False, cwd=None, encoding=None, errors=None, universal_newlines=None, timeout=None, text=None, **other_popen_kwargs)

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để chỉ định rằng một quy trình mới sẽ không tạo cửa sổ.

________ 33 ________ 419¶

Tham số

Popen(['/bin/sh', '-c', args[0], args[1], ...])
2
Popen(['/bin/sh', '-c', args[0], args[1], ...])
87 để chỉ định rằng một quy trình mới sẽ không kế thừa bảng điều khiển cha mẹ của nó. Giá trị này không thể được sử dụng với create_new_console.

run(..., check=True, stdout=PIPE).stdout

________ 33 ________ 423¶

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

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
24 như được mô tả trong các đối số được sử dụng thường xuyên và
Popen(['/bin/sh', '-c', args[0], args[1], ...])
1.Frequently Used Arguments and
Popen(['/bin/sh', '-c', args[0], args[1], ...])
1.

Để nắm bắt lỗi tiêu chuẩn trong kết quả, hãy sử dụng

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
1:

>>> subprocess.check_output(
...     "ls non_existent_file; exit 0",
...     stderr=subprocess.STDOUT,
...     shell=True)
'ls: non_existent_file: No such file or directory\n'

Mớ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

Popen(['/bin/sh', '-c', args[0], args[1], ...])
1 để biết chi tiết.encoding and errors were added. See
Popen(['/bin/sh', '-c', args[0], args[1], ...])
1 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 >>> 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! 8

Trong 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

>>> 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!
48 thay thế.

Ngoài ra, việc thay thế sử dụng

output = check_output(["mycmd", "myarg"])
0 sẽ thất bại với
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
7 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
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
55 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

>>> 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!
8.

Thay thế /Bin /SH Shell Lệnh thay thế SHELL/bin/sh shell command substitution¶

becomes:

output = check_output(["mycmd", "myarg"])

Thay thế đường ống shell

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
0

becomes:

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
1

Cuộc gọi

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
71 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:

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
0

becomes:

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
3

Thay thế ________ 361¶

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
4

Notes:

  • Gọi chương trình thông qua vỏ thường không được yêu cầu.

  • Giá trị trả về

    >>> 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!
    
    57 được mã hóa khác với giá trị
    Popen(['/bin/sh', '-c', args[0], args[1], ...])
    
    61.

  • Hàm

    Popen(['/bin/sh', '-c', args[0], args[1], ...])
    
    61 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
    >>> 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!
    
    8.

Một ví dụ thực tế hơn sẽ trông như thế này:

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
5

Thay thế cho gia đình with Popen(["ifconfig"], stdout=PIPE) as proc: log.write(proc.stdout.read()) 77

Ví dụ P_Nowait:

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
6

Ví dụ P_Wait:

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
7

Ví dụ về vector:

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
8

Ví dụ về môi trường:

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
9

Thay thế with Popen(["ifconfig"], stdout=PIPE) as proc: log.write(proc.stdout.read()) 78, with Popen(["ifconfig"], stdout=PIPE) as proc: log.write(proc.stdout.read()) 79, ________ 480¶

>>> 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!
0

>>> 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!
1

>>> 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!
2

Xử lý mã trả lại dịch như sau:

>>> 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

Thay thế các chức năng từ mô -đun with Popen(["ifconfig"], stdout=PIPE) as proc: log.write(proc.stdout.read()) 81

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

>>> 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!
48 thay thế.

>>> 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!
4

>>> 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!
5

Ngoài ra, việc thay thế sử dụng

output = check_output(["mycmd", "myarg"])
0 sẽ thất bại với
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
7 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
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
55 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

    >>> 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!
    
    8.

  • Thay thế /Bin /SH Shell Lệnh thay thế SHELL

  • Thay thế đường ống shell

  • Cuộc gọi

    with Popen(["ifconfig"], stdout=PIPE) as proc:
        log.write(proc.stdout.read())
    
    71 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:

Thay thế ________ 361¶

Gọi chương trình thông qua vỏ thường không được yêu cầu.(cmd)

Giá trị trả về

>>> 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!
57 được mã hóa khác với giá trị
Popen(['/bin/sh', '-c', args[0], args[1], ...])
61.

Hàm

Popen(['/bin/sh', '-c', args[0], args[1], ...])
61 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
>>> 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!
8.Frequently Used Arguments for more details.

Một ví dụ thực tế hơn sẽ trông như thế này:

>>> 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!
6

Thay thế cho gia đình

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
77: POSIX & Windows.

Ví dụ P_Nowait:Windows support was added.

Ví dụ P_Wait:

Ví dụ về vector:(cmd)

Ví dụ về môi trường:

Thay thế

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
78,
with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
79, ________ 480¶

>>> 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!
7

Thay thế cho gia đình

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
77: POSIX & Windows.

Ví dụ P_Nowait:Windows support added

Ví dụ P_Wait:

Ví dụ về vector:

Ví dụ về môi trường:

  1. Thay thế

    with Popen(["ifconfig"], stdout=PIPE) as proc:
        log.write(proc.stdout.read())
    
    78,
    with Popen(["ifconfig"], stdout=PIPE) as proc:
        log.write(proc.stdout.read())
    
    79, ________ 480¶

  2. Một chuỗi được bao quanh bởi các dấu ngoặc kép được hiểu là một đối số duy nhất, bất kể không gian trắng có trong. Một chuỗi được trích dẫn có thể được nhúng trong một đối số.

  3. Một dấu ngoặc kép có trước một dấu gạch chéo ngược được hiểu là một dấu ngoặc kép theo nghĩa đen.

  4. Backslashes được giải thích theo nghĩa đen, trừ khi chúng ngay lập tức đi trước dấu ngoặc kép.

  5. Nếu dấu gạch chéo ngược ngay trước dấu ngoặc kép, mỗi cặp dấu gạch chéo ngược được hiểu là một dấu gạch chéo ngược theo nghĩa đen. Nếu số lượng dấu gạch chéo ngược là số lẻ, dấu gạch chéo ngược cuối cùng sẽ thoát khỏi dấu ngoặc kép tiếp theo như được mô tả trong Quy tắc 3.

Xem thêm

proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()
00

Mô -đun cung cấp chức năng cho các dòng lệnh phân tích và thoát.

Làm thế nào để bạn chạy một lệnh phụ trong Python?

Chạy một lệnh với quy trình con trong dòng đầu tiên, chúng tôi nhập mô -đun phụ, là một phần của thư viện tiêu chuẩn Python. Sau đó, chúng tôi sử dụng hàm SubProcess.run () để thực thi lệnh.use the subprocess. run() function to execute the command.

Các quá trình phụ chạy trong Python là gì?

Mô -đun phụ cho phép bạn sinh ra các quy trình mới, kết nối với đường ống đầu vào/đầu ra/lỗi của chúng và có được mã trả lại của chúng.Mô -đun này dự định thay thế một số mô -đun và chức năng cũ hơn: HĐH.hệ thống hệ thống.

Làm thế nào để bạn chạy một quá trình trong Python?

Để chạy các tập lệnh Python bằng lệnh Python, bạn cần mở một dòng lệnh và nhập từ python, hoặc python3 nếu bạn có cả hai phiên bản, theo sau là đường dẫn đến tập lệnh của bạn, giống như thế này: $ python3 hello.py xin chàoThế giới!Nếu mọi thứ hoạt động ổn, sau khi bạn nhấn Enter, bạn sẽ thấy cụm từ Hello World!open a command-line and type in the word python , or python3 if you have both versions, followed by the path to your script, just like this: $ python3 hello.py Hello World! If everything works okay, after you press Enter , you'll see the phrase Hello World!

Làm thế nào để tôi có được đầu ra để chạy từ quy trình con?

Để nắm bắt đầu ra của quy trình con.Chạy phương thức, sử dụng một đối số bổ sung có tên là Capture_output = true.Bạn có thể truy cập riêng các giá trị stdout và stderr bằng cách sử dụng đầu ra.STDOUT và đầu ra.use an additional argument named “capture_output=True”. You can individually access stdout and stderr values by using “output. stdout” and “output.