일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 데이터구조
- I'm Sorry
- 자료구조
- 컴퓨터공학
- 자바스크립트
- 네트워크보안
- 보안
- 머신러닝
- 소프트웨어공학
- 컴퓨터비전
- 웹개발
- 알고리즘
- 2
- 딥러닝
- 컴퓨터과학
- 버전관리
- Yes
- 클라우드컴퓨팅
- 코딩
- 데이터베이스
- 파이썬
- 소프트웨어
- 데이터과학
- 빅데이터
- 프로그래밍언어
- 사이버보안
- 네트워크
- 인공지능
- 프로그래밍
- 데이터분석
- Today
- Total
스택큐힙리스트
subprocess.Popen 호출의 출력을 문자열에 저장하기 [중복] 본문
이 질문에는 이미 답변이 있습니다 :
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 호출의 출력을 문자열에 저장하는 방법에 대해 설명하였다. 이 기능은 자주 사용되고 매우 유용하며 파이썬 프로그래밍이 필수적인 경우에도 사용된다. 이 기능을 사용하여 다양한 응용 프로그램을 만들 수 있기 때문에 파이썬 개발자가 이를 잘 익혀두는 것이 좋다.