Tôi có một tệp thực thi chấp nhận chuỗi và xuất ra một chuỗi khác. Bây giờ tôi cần phải cho một tập tin vào nó như là đầu vào và ghi đầu ra vào một tập tin khác. Lệnh tiêu chuẩn cho điều đó giống như sau executable_path <input> output
. Bây giờ tôi quấn nó trong python. Nhưng tôi gặp lỗi.Lệnh gọi tiến trình con Python với dấu lớn hơn (>) không hoạt động
cmd = [executable_path , '<', 'tmp/input.txt', '>',
'tmp/output.txt']
p = subprocess.Popen(cmd)
p.communicate()
invalid argument: <
Tôi cũng cố gắng tham gia các đối số cmd:
cmd = [executable_path, ' '.join(['<', 'tmp/input.txt', '>',
'tmp/output.txt'])]
invalid argument: < tmp/input.txt > tmp/output.txt
Đi qua các lệnh như chuỗi không làm việc một trong hai.
p = subprocess.Popen(' '.join(cmd))
OSError: [Errno 2] No such file or directory
tôi thiếu gì ở đây?
Điều này nghe có vẻ gọn gàng hơn những gì ban đầu tôi có. Tôi chuyển sang giải pháp này. Cảm ơn. – CentAu
Bạn thực sự có thể sử dụng bất kỳ loại mô tả tệp nào, ví dụ: các đường dẫn, và thậm chí cả TCP [socket] (https://docs.python.org/2/library/socket.html#socket.socket.fileno). – kay
@ user292139: không liên quan: 1. không sử dụng '.communicate()' trừ khi bạn sử dụng 'PIPE'. Bạn có thể sử dụng 'subprocess.check_call ([executable_path], stdin = in_stream, stdout = out_stream)' thay thế. 2. Bạn không thể sử dụng các socket TCP ở đây, để chuyển hướng đầu ra của tiến trình con trên Windows. – jfs