2010-09-30 28 views
5

Tôi đang cố gắng làm theo các thông tin tôi có thể tìm thấy về subprocess.Popen như tôi muốn thực hiện một cuộc gọi dòng lệnh linux .. Tôi đang cố gắng như sau nhưng đang nhận được lỗi "[Errno 2] Không có tập tin hoặc thư mục như vậy". Tôi không cố gắng để mở một tập tin vì vậy tôi không hiểu lỗi này, và nó hoạt động tốt (mặc dù với các vấn đề khác liên quan đến chờ đợi cho quá trình để kết thúc khi tôi không muốn nó) khi tôi sử dụng một hệ điều hành thông thường .popen.Python, sử dụng subprocess.Popen để thực hiện cuộc gọi dòng lệnh linux? Tôi nhận được "[Errno 2] Không có tập tin hoặc thư mục như vậy"

Tôi dường như không thể tìm ra cách thực hiện điều này đúng cách, mọi lời khuyên đều được đánh giá cao.

CHỈNH SỬA: CÂU HỎI TÔI ĐANG SỬ DỤNG LÀ COMPLEX VÀ BIẾN, nó quá ngoài ngữ cảnh để bao gồm nó ở đây, tôi nghĩ rằng nó đủ để nói rằng mã hoạt động khi tôi sử dụng os.popen và không khi tôi làm phương pháp mới, vì vậy không, các "lệnh linux dòng gọi là" rõ ràng là không phải là cuộc gọi tôi đang sử dụng

subprocess.Popen([r"linux command line call"]) 
>>> [Errno 2] No such file or directory 
+7

Đó có phải là mã bạn đã cố gắng chạy không? – zwol

+0

tất nhiên là không (tại sao bạn thậm chí sẽ yêu cầu điều này?) Nhưng mã là variablized và sẽ không có ý nghĩa nhiều ở đây mà không có bối cảnh .. ok tôi sẽ kiểm tra nó với một số mã cơ bản khác và cập nhật bài – Rick

+0

nevermind, ai đó đã trả lời câu hỏi, dưới đây, rõ ràng họ đã có thể hiểu những gì tôi có nghĩa là – Rick

Trả lời

14
import subprocess  
proc=subprocess.Popen(['ls','-l']) # <-- Change the command here 
proc.communicate() 

Popen hy vọng một danh sách các chuỗi. Chuỗi đầu tiên thường là chương trình được chạy, tiếp theo là các đối số của nó. Đôi khi lệnh phức tạp, việc sử dụng shlex.split để tạo danh sách cho bạn là thuận tiện:

import shlex 
proc=subprocess.Popen(shlex.split('ls -l')) 
proc.communicate() 
+0

là bạn phải luôn luôn sử dụng 'ls' và đặt lệnh gọi dòng trong phần thứ hai? Một cách khác với shlex mà bạn đã đăng dường như đang hoạt động .. – Rick

+1

@Rick: 'ls' chỉ là một ví dụ; bạn nên thay thế nó bằng bất kỳ lệnh thực nào bạn đang cố chạy. – unutbu

+0

Tôi nhận 'subprocess.Popen (shlex.split ('ls -l'))' để làm việc cho các lệnh cơ bản, như 'ls-l' nhưng đối với lệnh của tôi, đó là bắt đầu một máy chủ, tôi vẫn nhận được ' [Errno 2] Không có tập tin hoặc thư mục như vậy ', khi cùng một lệnh chính xác hoạt động bằng os.popen. Của nó quá ra khỏi bối cảnh để có được vào lệnh gọi ở đây (của nó cho máy chủ web selen) nhưng tôi tự hỏi nếu có bất kỳ sự khác biệt như xa như những gì hệ thống nhận được giữa các cách khác nhau của các cuộc gọi như tôi không thể tìm hiểu lý do tại sao nó thực hiện điều này – Rick

Các vấn đề liên quan