[PYTHON] 파이썬 - 파이프와 쉘 명령을 실행하는 방법?
PYTHON파이썬 - 파이프와 쉘 명령을 실행하는 방법?
파이썬에서 다음 셸 명령을 실행하고 결과를 얻으려는 경우가 있습니다.
echo This_is_a_testing | grep -c test
이 파이썬 코드를 사용하여 파이썬에서 위의 쉘 명령을 실행할 수 있습니다.
>>> import subprocess
>>> subprocess.check_output("echo This_is_a_testing | grep -c test", shell=True)
'1\n'
그러나 "shell = True"옵션을 사용하고 싶지 않기 때문에 다음 파이썬 코드를 시도해 보았습니다.
>>> 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)
왜 웹 페이지의 설명을 참조 했으므로 출력이 "없음"인지 궁금합니다. http://docs.python.org/library/subprocess.html#subprocess.PIPE
내 코드에서 몇 가지 포인트를 놓치셨습니까? 어떤 제안 / 아이디어? 미리 감사드립니다.
해결법
-
==============================
1.매뉴얼에서 :
매뉴얼에서 :
p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout, stdout=subprocess.PIPE)
-
==============================
2.여기를보세요 :
여기를보세요 :
>>> import subprocess >>> p1 = subprocess.Popen(["echo", "This_is_a_testing"], stdout=subprocess.PIPE) >>> p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout) >>> 1 p1.stdout.close() >>> p2.communicate() (None, None) >>>
여기에 p2 = subprocess.Popen ([ "grep", "-c", "test"], stdin = p1.stdout)을 쓰면 출력이 1이됩니다. 질문의 컨텍스트에서이 출력을 무시하지 마십시오.
이것이 원하는 경우, 두 번째 Popen에 인수로 stdout = subprocess.PIPE를 전달하십시오.
>>> p1 = subprocess.Popen(["echo", "This_is_a_testing"], stdout=subprocess.PIPE) >>> p2 = subprocess.Popen(["grep", "test"], stdin=p1.stdout, stdout=subprocess.PIPE) >>> p2.communicate() ('This_is_a_testing\n', None) >>>
-
==============================
3.
>>> import subprocess >>> mycmd=subprocess.getoutput('df -h | grep home | gawk \'{ print $1 }\' | cut -d\'/\' -f3') >>> mycmd 'sda6' >>>
-
==============================
4.받아 들인 답이 올 바르고 작동하는 동안 또 다른 옵션은 Popen.communicate () 메서드를 사용하여 뭔가를 프로세스의 표준 입력으로 전달하는 것입니다.
받아 들인 답이 올 바르고 작동하는 동안 또 다른 옵션은 Popen.communicate () 메서드를 사용하여 뭔가를 프로세스의 표준 입력으로 전달하는 것입니다.
>>> import subprocess >>> p2 = subprocess.Popen(["grep", "-c", "test"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) >>> p2.communicate("This_is_a_testing") ('1\n', None) >>> print p2.returncode 0 >>>>
이것은 출력이 이미 파이썬 스크립트 자체에 알려져 있다면, 출력을 리디렉션하기 위해 다른 명령을 실행할 필요성을 해결합니다.
그러나 통신에는 프로세스가 종료 될 때까지 기다리는 부작용이 있습니다. 두 프로세스를 사용하여 비동기 실행이 필요하거나 원하는 경우 더 나은 옵션이 될 수 있습니다.
from https://stackoverflow.com/questions/9393425/python-how-to-execute-shell-commands-with-pipe by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python의 unittest 및 동적 테스트 케이스 생성 [duplicate] (0) | 2018.10.23 |
---|---|
[PYTHON] 파일을 수치로 어떻게 정렬합니까? (0) | 2018.10.23 |
[PYTHON] threading.Thread.join ()의 사용 (0) | 2018.10.23 |
[PYTHON] Tensorflow : Tensorboard에서 사용자 정의 이미지를 표시하는 방법 (예 : Matplotlib Plots) (0) | 2018.10.23 |
[PYTHON] 파이썬에서 영어 수축 확장하기 (0) | 2018.10.23 |