일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 보안
- 클라우드컴퓨팅
- 데이터구조
- Yes
- 알고리즘
- 버전관리
- 컴퓨터공학
- 2
- 소프트웨어
- 인공지능
- 데이터베이스
- 데이터과학
- 웹개발
- 네트워크
- 프로그래밍언어
- 자료구조
- Today
- Total
스택큐힙리스트
'timeout'를 사용하여 'subprocess' 모듈 사용하기 본문
임의의 명령어를 실행하여 반환되는 stdout 데이터를 반환하거나 비정상적인 종료 코드가있는 경우 예외를 발생시키는 Python 코드입니다.
proc = subprocess.Popen(
cmd,
stderr=subprocess.STDOUT, # Merge stdout and stderr
stdout=subprocess.PIPE,
shell=True)
communicate은 프로세스가 종료될 때까지 기다리기 위해 사용됩니다.
stdoutdata, stderrdata = proc.communicate()
해당 모듈은 제한 시간을 지원하지 않아(특정 초 이상 실행되고 있는 프로세스를 종료할 수 있는 능력), communicate을(를) 실행하는 데 영원히 걸릴 수 있습니다.
Windows와 Linux에서 실행할 Python 프로그램에서 Timeout을 구현하는 가장 간단한 방법은 무엇인가요?
답변 1
파이썬 3.3+에서:
from subprocess import STDOUT, check_output
output = check_output(cmd, stderr=STDOUT, timeout=seconds)
output는 명령어 병합된 표준 출력(stderr) 데이터를 포함하는 바이트 문자열입니다.
질문의 텍스트에서 지정된 것처럼 0이 아닌 종료 상태에서 CalledProcessError 를 발생시킵니다. proc.communicate() 방법과는 다릅니다.
나는 종종 불필요하게 사용되기 때문에 shell=True를 제거했습니다. 만약 실제로 필요하다면 언제든지 다시 추가할 수 있습니다. 자식 프로세스가 자체 하위 항목을 생성하는 경우 shell=True를 추가하면 타임아웃 표시보다 훨씬 늦게 check_output()이 반환될 수 있다는 것을 참고해주세요, Subprocess timeout failure를 참조하세요.
타임아웃 기능은 3.2 이상 서브프로세스 모듈의 subprocess32 역설적인 백포트를 통해 Python 2.x에서 사용할 수 있습니다.
답변 2
사용할 수 있는 유용한 파이썬 모듈 중 하나인 'subprocess'를 사용하여 프로그램 내에서 외부 명령어 및 프로그램을 실행할 수 있다. 그러나 때로는 실행하는데 시간이 많이 걸려서 프로그램이 멈추거나 빠르게 실행되어야 하는 경우가 있다. 'subprocess' 모듈을 이용하여 이러한 시간 제한 문제를 해결할 수 있다.프로그램에서 'subprocess'를 사용하면 다른 프로그램을 실행하고 결과를 받아올 수 있다. 그러나 때로는 다른 프로그램이 실행하는 데 시간이 많이 걸릴 수 있다. 이 때, 'subprocess' 모듈을 사용하여 실행 시간을 제한할 수 있다. 'subprocess'모듈의 'timeout'인자를 사용하면 특정 시간 이내에 실행되지 않으면 프로세스를 강제로 중지시킬 수 있다.
이것은 일반적으로 보안 체계에서 유용할 수 있다. 외부 프로그램이 정상적으로 실행되고 있지 않으면 프로그램이 멈추지 않고 계속해서 실행될 수 있다. 이것은 보안에 매우 중요한 역할을 할 수 있다.
또 다른 장점은 'subprocess'가 다른 프로그램을 실행하고 결과를 반환하는 데 사용된다는 것이다. 이것은 프로그램에서 다른 프로그램을 호출하는 데 사용될 수 있다는 것을 의미한다. 이것은 또한 운영체제에서 사용할 수 있는 다른 프로그램에 액세스하는 데 사용될 수 있다. 따라서 이 기능은 유용성, 속도 및 효율성을 조합하여 시스템에서 다른 프로그램에 액세스하는 데 큰 도움이 될 수 있다.
결론적으로, 'subprocess' 모듈의 'timeout'인자를 사용하여 외부 프로그램을 실행하는 데 걸리는 시간을 제한할 수 있다. 이 기능은 보안성 및 시스템 효율성 측면에서 매우 중요할 수 있으며, 유용성, 속도 및 효율성을 조합하여 더 나은 시스템 구성을 위한 중요한 툴로 사용될 수 있다.