백엔드 개발 파이썬 튜토리얼 Python에서 Linux 셸 명령 호출

Python에서 Linux 셸 명령 호출

Nov 23, 2016 pm 01:04 PM

파일 시스템 마운트와 같은 비교적 간단한 작업을 완료하기 위해 셸 명령을 직접 호출해야 하는 경우가 있습니다. 그렇다면 Python을 사용하여 Linux Shell 명령을 어떻게 호출합니까? 일반적으로 사용되는 메소드는 다음과 같습니다.

1. os 모듈

1.1. os 모듈의 exec 메소드 계열

Python의 exec 시스템 메소드는 일관됩니다. Unix exec 시스템 호출을 사용합니다. 외부 프로그램이 현재 프로세스의 코드를 대체하고 반환하지 않기 때문에 이러한 메서드는 하위 프로세스에서 외부 프로그램을 호출하는 데 적합합니다. (help(os) --> "exec"를 검색해 보았으나 어떻게 사용하는지 잘 모르겠습니다.)

1.2. 🎜 >

시스템 메소드는 외부 프로그램을 실행하기 위한 하위 프로세스를 생성하며, 외부 프로그램의 실행 결과만 반환합니다. 이 방법은 외부 프로그램이 결과를 출력하지 않는 상황에 더 적합합니다.

[python] view plaincopy

>>> import os

>>> os.system("echo "Hello World"") # os.system을 사용하여 직접 echo 명령 호출

Hello World ——————> 명령 결과 인쇄

0 ——————>

>>> val = os.system("ls -al | grep "log" ") # 반환 값을 받으려면 val을 사용하세요.

-rw-r--r -- 1 root 6030829 Dec 31 15:14 log ——————> 이때는 명령 결과만 출력됩니다

>>> print val  

0 ——> 이때 명령이 정상적으로 실행되면 반환 값은 0입니다.

>>> val = os.system("ls -al | grep "log1" ")

>>> print val

256 ——————> 결과를 반환하지 않는 명령을 호출하려면 os.system을 사용하고 반환 값은 256입니다. ~

> >>  

참고: 위에서 언급한 것처럼 이 방법은 os.system의 결과인 외부 프로그램의 결과를 저장합니다. 명령어의 반환 값을 받고 싶다면 아래를 보세요~

1.3.os 모듈의 popen 메소드

이 메소드는 필요할 때 매우 유용합니다. 외부 프로그램의 출력 결과를 얻으려면 파일과 같은 객체를 반환하고 객체를 호출합니다. read() 또는 readlines() 메서드는 출력 내용을 읽을 수 있습니다. 예를 들어 urllib를 사용하여 Web API를 호출하는 경우 가져온 데이터를 처리해야 합니다. os.popen(cmd) 명령의 출력을 얻으려면 a=os.popen(cmd).read()

와 같이 read() 또는 readlines()를 호출하면 됩니다. [python] 일반 복사 보기

>>> os.popen('ls -lt')                                                        > >>> print os.popen('ls -lt').read() # read() 메소드 호출 명령의 결과를 얻을 수 있습니다

총 6064

-rwxr-xr-x 길이 1개 1월 5일 23일 21:00 hello.sh

-rw-r--r -- 길이 1개 147 1월 5일 20:26 Makefile

drwxr-xr-x 3 긴 긴 4096 1월 2일 19:37 테스트

-rw-r--r-- 1 루트 루트 6030829 12월 31일 15:14 로그

drwxr -xr-x 2 long 4096 12월 28일 09:36 pip_build_long

drwx------ 2 Debian-gdm Debian-gdm 4096 12월 23일 19:08 pulse-gylJ5EL24GU9

drwx - ----- 2 long long 4096 1970년 1월 1일 궤도 길이

>>> val = os.popen('ls -lt').read() # 명령을 수신하려면 변수를 사용하십시오. 값

>>> 값에 "log"가 있는 경우:                                                                   ~                                                 로그가 있습니다."

... else:

... print "No,not happy"

...

하하, 로그가 있습니다



2. 명령 모듈


은 명령 모듈의 getoutput 메소드를 사용합니다. 이 메소드는 popen과의 차이점은 popen이 파일과 같은 객체를 반환하는 반면, 이 메소드는 외부 프로그램의 출력을 문자열로 반환한다는 것입니다. 많은 경우에 사용하기가 더 편리합니다.

주요 메서드:


* Commands.getstatusoutput(cmd) 반환(상태, 출력)

* Commands.getoutput(cmd) 출력 결과만 반환

* Commands.getstatus(file) 반환 ls -ld 파일의 실행 결과 문자열이 getoutput을 호출합니다. 이 방법은 사용하지 않는 것이 좋습니다.


[python] view plaincopy

long@zhouyl:/tmp/tests$ python

Python 2.7.3(기본값, 2013년 1월 2일, 16:53:07)

[GCC 4.7.2] on linux2

"help", "를 입력하세요. 자세한 내용은 copyright", "크레딧" 또는 "라이센스"를 참조하세요.

>>> 명령 가져오기

>>> Commands.getstatusoutput('ls -lt') # 반환(상태, 출력)

(0, 'total 5900n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.shn-rw-r--r-- 1 long long 147 Jan 5 21:34 Makefilen-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log')

>>> Commands.getoutput('ls -lt') # Return 명령어 출력결과(Shell 명령어 출력형식과 다른 것 같네요~)

'total 5900n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.shn-rw -r--r- - 긴 길이 1개 147 Jan 5 21:34 Makefilen-rw-r--r-- 긴 길이 1개 6030829 Jan 5 21:34 log'

>>> .getstatus('log' )                   # 'log' 파일에서 동일한 작업을 수행하려면 Commands.getoutput에서 명령을 호출합니다.

'-rw-r--r-- 1 long long 6030829 Jan 5 21: 34 log'

>>>



3. 공식에 따르면 Python 문서에서 subprocess 모듈은 위의 모듈을 대체하는 데 사용됩니다. Python에는 mssh라는 병렬 SSH 도구가 구현되어 있습니다. 코드는 매우 짧지만 작업을 수행하기 위해 스레드에서 하위 프로세스를 호출합니다.

[python] 하위 프로세스 가져오기 호출에서 일반 복사 보기


>>

>>> call(["ls", "-l"])


시스템에 비해 하위 프로세스의 장점은 더 유연하다는 것입니다(표준 출력을 얻을 수 있음). , 표준 오류, "실제" 상태 코드, 향상된 오류 처리 등...). 내 생각에 os.system을 사용하는 것은 더 이상 쓸모가 없거나 곧 그렇게 될 것입니다.

4. 다양한 방법의 비교 및 ​​요약

4.1 os.system 정보

os.system("some_command with args")이 명령을 내립니다. 시스템 셸에 인수를 전달할 뿐만 아니라 이 방법으로 여러 명령을 동시에 실행할 수 있고 파이프와 입력 및 출력 리디렉션을 설정할 수 있기 때문에 이는 매우 좋습니다. 예:
os.system("some_command < input_file | another_command > output_file")
그러나 이것이 편리하기는 하지만 공백 등의 셸 문자 이스케이프를 수동으로 처리해야 합니다. 또한 이를 통해 외부 프로그램이 아닌 간단한 쉘 명령만 실행할 수 있습니다.

4.2. os.popen 정보

stream = os.popen("some_command with args")를 사용하면 os.system과 동일한 작업을 수행할 수도 있습니다. .system과의 차이점은 os.popen이 표준 입력 및 출력에 액세스하는 데 사용할 수 있는 파일과 같은 객체를 반환한다는 것입니다.

4.3.subprocess.popen 정보

subprocess 모듈의 Popen 클래스는 os.popen을 대체하기 위한 것이지만 매우 포괄적이기 때문에 약간 더 많습니다. os.popen보다 복잡합니다.
예를 들어 print os.popen("echo Hello World").read() 대신 print Popen("echo Hello World", stdout=PIPE, shell=True).stdout.read()를 사용할 수 있습니다. 하지만 이에 비해 4가지 다른 popen 함수를 포함하는 통일된 클래스를 사용하는 것이 좋습니다.

4.4.subprocess.call 소개

subprocess 모듈의 호출 기능. 이는 기본적으로 Popen 클래스와 같으며 동일한 매개변수를 사용하지만 단순히 명령이 완료될 때까지 기다리고 반환 코드를 제공합니다. 예를 들면 다음과 같습니다.
return_code = subprocess.call("echo Hello World", shell=True)


os 모듈에도 C와 마찬가지로 fork/exec/spawn 기능이 있지만 저는 그렇지 않습니다. 직접 사용하지 마십시오. 하위 프로세스가 더 적합할 수 있습니다.


======================================= === ==
[1] http://demi-panda.com/2013/01/25/python-shell-command/index.html
[2] http://m.blog. csdn.net /blog/overstack/9295995
[3] http://blog.csdn.net/swiftshow/article/details/7755543

다음은 관련 콘텐츠에 대한 공식 Python 문서입니다. 기사:

[4] http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the-subprocess-module - 하위 프로세스를 사용하여 이전 방법을 대체하는 방법에 대해

[5] http://docs.python.org/lib/os-process.html -- os의 exec 메소드 계열 및 시스템 메소드

[6] http://docs. python.org/ lib/os-newstreams.html -- os popen 메소드

[7] http://docs.python.org/lib/node528.html -- os 하위 프로세스 소개


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법 Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법 Mar 05, 2025 am 09:58 AM

이 튜토리얼은 Python을 사용하여 Zipf의 법칙의 통계 개념을 처리하는 방법을 보여주고 법을 처리 할 때 Python의 읽기 및 대형 텍스트 파일을 정렬하는 효율성을 보여줍니다. ZIPF 분포라는 용어가 무엇을 의미하는지 궁금 할 것입니다. 이 용어를 이해하려면 먼저 Zipf의 법칙을 정의해야합니다. 걱정하지 마세요. 지침을 단순화하려고 노력할 것입니다. Zipf의 법칙 Zipf의 법칙은 단순히 : 큰 자연어 코퍼스에서 가장 자주 발생하는 단어는 두 번째 빈번한 단어, 세 번째 빈번한 단어보다 세 번, 네 번째 빈번한 단어 등 4 배나 자주 발생합니다. 예를 살펴 보겠습니다. 미국 영어로 브라운 코퍼스를 보면 가장 빈번한 단어는 "TH입니다.

파이썬의 이미지 필터링 파이썬의 이미지 필터링 Mar 03, 2025 am 09:44 AM

시끄러운 이미지를 다루는 것은 특히 휴대폰 또는 저해상도 카메라 사진에서 일반적인 문제입니다. 이 튜토리얼은 OpenCV를 사용 하여이 문제를 해결하기 위해 Python의 이미지 필터링 기술을 탐구합니다. 이미지 필터링 : 강력한 도구 이미지 필터

HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까? HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까? Mar 10, 2025 pm 06:54 PM

이 기사에서는 HTML을 구문 분석하기 위해 파이썬 라이브러리 인 아름다운 수프를 사용하는 방법을 설명합니다. 데이터 추출, 다양한 HTML 구조 및 오류 처리 및 대안 (SEL과 같은 Find (), find_all (), select () 및 get_text ()와 같은 일반적인 방법을 자세히 설명합니다.

파이썬의 병렬 및 동시 프로그래밍 소개 파이썬의 병렬 및 동시 프로그래밍 소개 Mar 03, 2025 am 10:32 AM

데이터 과학 및 처리가 가장 좋아하는 Python은 고성능 컴퓨팅을위한 풍부한 생태계를 제공합니다. 그러나 Python의 병렬 프로그래밍은 독특한 과제를 제시합니다. 이 튜토리얼은 이러한 과제를 탐구하며 전 세계 해석에 중점을 둡니다.

Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까? Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까? Mar 10, 2025 pm 06:52 PM

이 기사는 딥 러닝을 위해 텐서 플로와 Pytorch를 비교합니다. 데이터 준비, 모델 구축, 교육, 평가 및 배포와 관련된 단계에 대해 자세히 설명합니다. 프레임 워크, 특히 계산 포도와 관련하여 주요 차이점

파이썬에서 자신의 데이터 구조를 구현하는 방법 파이썬에서 자신의 데이터 구조를 구현하는 방법 Mar 03, 2025 am 09:28 AM

이 튜토리얼은 Python 3에서 사용자 정의 파이프 라인 데이터 구조를 작성하여 클래스 및 작업자 과부하를 활용하여 향상된 기능을 보여줍니다. 파이프 라인의 유연성은 일련의 기능을 데이터 세트, GE에 적용하는 능력에 있습니다.

파이썬 객체의 직렬화 및 사제화 : 1 부 파이썬 객체의 직렬화 및 사제화 : 1 부 Mar 08, 2025 am 09:39 AM

파이썬 객체의 직렬화 및 사막화는 사소한 프로그램의 주요 측면입니다. 무언가를 Python 파일에 저장하면 구성 파일을 읽거나 HTTP 요청에 응답하는 경우 객체 직렬화 및 사태화를 수행합니다. 어떤 의미에서, 직렬화와 사제화는 세계에서 가장 지루한 것들입니다. 이 모든 형식과 프로토콜에 대해 누가 걱정합니까? 일부 파이썬 객체를 지속하거나 스트리밍하여 나중에 완전히 검색하려고합니다. 이것은 세상을 개념적 차원에서 볼 수있는 좋은 방법입니다. 그러나 실제 수준에서 선택한 직렬화 체계, 형식 또는 프로토콜은 속도, 보안, 유지 보수 상태 및 프로그램의 기타 측면을 결정할 수 있습니다.

파이썬의 수학 모듈 : 통계 파이썬의 수학 모듈 : 통계 Mar 09, 2025 am 11:40 AM

Python의 통계 모듈은 강력한 데이터 통계 분석 기능을 제공하여 생물 통계 및 비즈니스 분석과 같은 데이터의 전반적인 특성을 빠르게 이해할 수 있도록 도와줍니다. 데이터 포인트를 하나씩 보는 대신 평균 또는 분산과 같은 통계를보고 무시할 수있는 원래 데이터에서 트렌드와 기능을 발견하고 대형 데이터 세트를보다 쉽고 효과적으로 비교하십시오. 이 튜토리얼은 평균을 계산하고 데이터 세트의 분산 정도를 측정하는 방법을 설명합니다. 달리 명시되지 않는 한,이 모듈의 모든 함수는 단순히 평균을 합산하는 대신 평균 () 함수의 계산을 지원합니다. 부동 소수점 번호도 사용할 수 있습니다. 무작위로 가져옵니다 수입 통계 Fracti에서

See all articles