스택큐힙리스트

subprocess.Popen 호출의 출력을 문자열에 저장하기 [중복] 본문

카테고리 없음

subprocess.Popen 호출의 출력을 문자열에 저장하기 [중복]

스택큐힙리스트 2023. 4. 4. 07:37
반응형

이 질문에는 이미 답변이 있습니다 :

Running shell command and capturing the output

21개의 대답

1년 전에 종료되었습니다.

저는 파이썬에서 시스템 호출을 시도하고, 파이썬 프로그램에서 조작할 수 있는 문자열에 출력을 저장하려고 합니다.

#!/usr/bin/python

import subprocess

p2 = subprocess.Popen(ntpq -p)

제가 여기서 얻은 제안들 중 일부를 포함하여 몇 가지 시도해봤습니다.

Retrieving the output of subprocess.call()

하지만 어떤 운도 없었습니다.

답변 1

파이썬 2.7 또는 파이썬 3에서

직접 Popen 객체를 만드는 대신, 명령의 출력을 문자열에 저장하려면 subprocess.check_output() function을 사용할 수 있습니다.

from subprocess import check_output

out = check_output([ntpq, -p])

파이썬 2.4-2.6에서

communicate 방법을 사용하십시오.

import subprocess

p = subprocess.Popen([ntpq, -p], stdout=subprocess.PIPE)

out, err = p.communicate()

당신이 원하는 것은 out입니다.

다른 답변에 대한 중요한 참고사항

명령을 전달한 방법에 주목하세요. ntpq -p 예제는 다른 문제를 가지고 있습니다. Popen 가 셸을 호출하지 않기 때문에 명령과 옵션의 목록을 사용해야합니다. [ntpq, -p] .

답변 2

이번 주제는 subprocess.Popen 호출의 출력을 문자열에 저장하는 것이다. 이것은 매우 유용한 기능이고 파이썬에서 자주 사용된다. 이 기능을 사용하면 특정 프로세스를 실행하고 결과를 파이썬 문자열로 가져올 수 있다.

우선, subprocess는 subprocess 모듈의 일부로 파이썬에서 제공하는 라이브러리다. 이 모듈은 새로운 프로세스를 생성하고 다른 프로세스의 출력, 입력 및 오류를 처리하는 데 사용된다. 이 모듈은 Popen 클래스를 사용하여 새 프로세스를 시작하고 결과를 가져올 수 있다.

Popen 클래스를 사용하여 subprocess를 시작하면 출력, 입력 및 오류 스트림에 대한 핸들이 생성된다. 이 핸들은 communicate() 메서드를 사용하여 스트림에서 데이터를 읽거나 쓸 수 있다. communicate() 메서드는 명령이 완료 될 때까지 대기한다.

다음으로, 결과를 문자열로 저장하는 방법을 살펴보자. 이를 수행하기 위해 communicate() 메서드를 사용하면 된다. 이 메서드는 튜플로 출력, 오류를 제공한다. 이 튜플의 첫 번째 요소는 출력이고 두 번째 요소는 오류 메시지이다. 이 출력을 문자열로 변환하려면 디코딩 해야한다. 기본적으로 바이트 시퀀스로 반환된다.

다음은 예제 코드이다.

```

import subprocess

process = subprocess.Popen([ls, -l], stdout=subprocess.PIPE)

output, error = process.communicate()

output_str = output.decode(utf-8)

print(output_str)

```

이 코드는 ls -l 명령을 실행하고 결과를 output_str 문자열에 저장한다. communicate() 메서드를 사용하여 프로세스 출력을 수집하고, decode() 메서드를 사용하여 바이트 문자열을 디코딩하고 문자열에 저장한다.

이 글에서는 subprocess.Popen 호출의 출력을 문자열에 저장하는 방법에 대해 설명하였다. 이 기능은 자주 사용되고 매우 유용하며 파이썬 프로그래밍이 필수적인 경우에도 사용된다. 이 기능을 사용하여 다양한 응용 프로그램을 만들 수 있기 때문에 파이썬 개발자가 이를 잘 익혀두는 것이 좋다.

반응형
Comments