Hướng dẫn python process communicate - quá trình python giao tiếp
Thực hiện một chương trình trẻ em trong một quy trình mới. Trên Unix, lớp sử dụng hành vi giống như ____ 2 để thực hiện chương trình trẻ em. Trên Windows, lớp sử dụng chức năng Windows Args nên là một chuỗi các đối số chương trình hoặc một chuỗi khác. 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. Trên Unix, 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ú
>>> import shlex, subprocess >>> command_line = raw_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 Đối số shell (mặc định là Trên UNIX với Popen(['/bin/sh', '-c', args[0], args[1], ...])0. 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 có tương đương với:Popen(['/bin/sh', '-c', args[0], args[1], ...]) Trên Windows với Popen(['/bin/sh', '-c', args[0], args[1], ...])3 chỉ định shell mặc định. Lần duy nhất bạn cần chỉ định shell=True 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 shell=True để chạy tệp hàng loạt hoặc thực thi dựa trên bảng điều khiển.Popen(['/bin/sh', '-c', args[0], args[1], ...])3 environment variable specifies the default shell. The only time you need to specify shell=True on Windows is when the command you wish to execute is built into the shell (e.g. dir or copy). You do not need shell=True to run a batch file or console-based executable.Cảnh báo Vượt qua Bufsize, nếu được đưa ra, có cùng ý nghĩa với đối số tương ứng với hàm Open in () tích hợp: Popen(['/bin/sh', '-c', args[0], args[1], ...])7 có nghĩa là không bị ảnh hưởng, Popen(['/bin/sh', '-c', args[0], args[1], ...])8 có nghĩa là được đệm dòng, bất kỳ giá trị dương nào khác có nghĩa là sử dụng bộ đệm (xấp xỉ) kích thước đó. Một bufsize âm có nghĩa là sử dụng mặc định hệ thống, thường có nghĩa là được đệm hoàn toàn. Giá trị mặc định cho BufSize là Popen(['/bin/sh', '-c', args[0], args[1], ...])7 (không bị ảnh hưởng). Ghi chú
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.ps. If Popen(['/bin/sh', '-c', args[0], args[1], ...])0. 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 Đối số shell (mặc định là Nếu Close_FDS là đúng, tất cả các mô tả tệp ngoại trừ Popen(['/bin/sh', '-c', args[0], args[1], ...])7, Popen(['/bin/sh', '-c', args[0], args[1], ...])8 và CreateProcess() 0 sẽ bị đóng trước khi quá trình con được thực thi. (Chỉ Unix). Hoặc, trên Windows, nếu Close_FDS là đúng thì sẽ không có tay cầm nào được kế thừa bởi quy trình con. Lưu ý rằng trên Windows, bạn không thể đặt Close_fds thành True và cũng chuyển hướng các tay cầm tiêu chuẩn bằng cách đặt stdin, stdout hoặc stderr.Nếu CWD không phải là Nếu env không phải là Ghi chú 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 Nếu Universal_Newlines là Ghi chú 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 Nếu Universal_Newlines là |