Tôi có một trường hợp muốn thực hiện lệnh shell sau bằng Python và nhận được đầu ra,Python - làm thế nào để thực hiện các lệnh shell với đường ống?
echo This_is_a_testing | grep -c test
tôi có thể sử dụng mã python này để thực hiện lệnh shell trên trong python,
>>> import subprocess
>>> subprocess.check_output("echo This_is_a_testing | grep -c test", shell=True)
'1\n'
Tuy nhiên, vì tôi không muốn sử dụng tùy chọn "shell = True", tôi đã thử mã python sau,
>>> import subprocess
>>> p1 = subprocess.Popen(["echo", "This_is_a_testing"], stdout=subprocess.PIPE)
>>> p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout)
>>> p1.stdout.close()
>>> p2.communicate()
(None, None)
Tôi tự hỏi tại sao đầu ra là "Không" Tôi đã giới thiệu các mô tả trong trang web: http://docs.python.org/library/subprocess.html#subprocess.PIPE
Tôi đã bỏ lỡ một số điểm trong mã của mình chưa? Bất kỳ đề nghị/ý tưởng? Cảm ơn trước.
cập nhật câu trả lời – avasal
liên quan: [Làm thế nào để sử dụng subprocess.Popen để kết nối nhiều quy trình bằng ống?] (http://stackoverflow.com/q/295459/4279) – jfs