2010-05-25 45 views
9

Từ các tài liệu python:tham số đầu tiên của os.exec *

Các loại exec *() chức năng phải mất một danh sách các đối số cho chương trình mới nạp vào quá trình này. Trong mỗi trường hợp, đối số đầu tiên của các đối số này được chuyển qua cho chương trình mới dưới dạng tên riêng thay vì làm đối số mà người dùng có thể đã nhập trên dòng lệnh. Đối với lập trình viên C, đây là argv [0] được chuyển đến chính của chương trình(). Đối với ví dụ , os.execv ('/ bin/echo', ['foo', 'thanh']) sẽ chỉ in thanh trên đầu ra tiêu chuẩn; foo dường như bị bỏ qua.

Ai đó có thể giúp tôi hiểu điều này không? Tôi cần phải làm gì nếu tôi muốn chạy chương trình của riêng mình với một số tham số?

Trả lời

17

UNIX, nơi tất cả những điều này exec đến từ, tách tệp thực thi chương trình khỏi tên chương trình để quá trình của bạn có thể có bất kỳ tên tùy ý nào.

Đối số đầu tiên là chương trình sẽ chạy. Điều này phải tồn tại. Đối số tiếp theo là quy trình của bạn chạy chương trình sẽ là được gọi là, nội dung sẽ có trong argv[0] và những gì xuất hiện trong đầu ra ps (danh sách quy trình).

Vì vậy, nếu tôi đã làm (trong C, nhưng nó bản đồ để Python cũng):

execl ("/usr/bin/sleep", "notsleep", "60", NULL); 

này sẽ chạy chương trình /usr/bin/sleep nhưng nó sẽ hiển thị trong danh sách các tiến trình theo notsleep. argv[0] sẽ là notsleepargv[1] (đối số thực tế) sẽ là 60. Thông thường, hai tham số đầu tiên sẽ giống nhau nhưng không cần thiết.

Đó là lý do tại sao đối số đầu tiên trong danh sách của bạn là (dường như) bị bỏ qua. Đó là tên để cung cấp cho quy trình, không phải là đối số đầu tiên cho quy trình đó.

Một hơn đúng cách để làm điều đó sẽ là:

os.execv('/bin/echo', ['echo', 'foo', 'bar']) 
Các vấn đề liên quan