programing

파이프에서 'subprocess' 명령어를 사용하는 방법

kingscode 2022. 10. 30. 18:14
반응형

파이프에서 'subprocess' 명령어를 사용하는 방법

사용하고 싶다subprocess.check_output()와 함께ps -A | grep 'process_name'여러 가지 해결책을 시도했지만 아직까지는 아무 소용이 없었습니다.누가 어떻게 하는지 좀 가르쳐 주시겠어요?

파이프와 함께 사용하는 방법subprocess모듈, 패스해야 합니다.shell=True.

그러나 이는 여러 가지 이유로 권장되지 않으며, 그 중 특히 보안에 관한 것입니다.대신,ps그리고.grep다음과 같이 출력을 다른 출력으로 파이핑합니다.

ps = subprocess.Popen(('ps', '-A'), stdout=subprocess.PIPE)
output = subprocess.check_output(('grep', 'process_name'), stdin=ps.stdout)
ps.wait()

단, 고객님의 경우 간단한 해결책은subprocess.check_output(('ps', '-A'))그리고 나서.str.find출력에 표시됩니다.

또는 하위 프로세스 개체에서 항상 통신 방법을 사용할 수 있습니다.

cmd = "ps -A|grep 'process_name'"
ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = ps.communicate()[0]
print(output)

통신 메서드는 표준 출력과 표준 오류의 태플을 반환합니다.

서브프로세스를 사용한 파이프라인 설정에 관한 매뉴얼을 참조해 주세요.http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

다음 코드 예는 테스트하지 않았지만 대략 원하는 코드일 것입니다.

query = "process_name"
ps_process = Popen(["ps", "-A"], stdout=PIPE)
grep_process = Popen(["grep", query], stdin=ps_process.stdout, stdout=PIPE)
ps_process.stdout.close()  # Allow ps_process to receive a SIGPIPE if grep_process exits.
output = grep_process.communicate()[0]

하위 프로세스 사용.실행하다

import subprocess
    
ps = subprocess.run(['ps', '-A'], check=True, capture_output=True)
processNames = subprocess.run(['grep', 'process_name'],
                              input=ps.stdout, capture_output=True)
print(processNames.stdout)

또, 을 사용해 주세요.'pgrep'대신 지휘하다'ps -A | grep 'process_name'

파이프 기능은 sh.py 에서 시험할 수 있습니다.

import sh
print sh.grep(sh.ps("-ax"), "process_name")
command = "ps -A | grep 'process_name'"
output = subprocess.check_output(["bash", "-c", command])

언급URL : https://stackoverflow.com/questions/13332268/how-to-use-subprocess-command-with-pipes

반응형