반응형
파이프에서 '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
반응형
'programing' 카테고리의 다른 글
그룹화된 결과의 각 그룹에 대해 상위 n개의 레코드를 가져옵니다. (0) | 2022.10.30 |
---|---|
위의 디렉토리에 있는 Python 클래스를 Import하려면 어떻게 해야 합니까? (0) | 2022.10.30 |
JavaScript 문자열 암호화 및 암호 해독 (0) | 2022.10.30 |
업데이트된 vuex 상태에 대한 vue 수명 주기 방법 (0) | 2022.10.30 |
배열의 첫 번째 인덱스를 반환하는 NumPy 함수가 있습니까? (0) | 2022.10.29 |