Python 스크립트는 터미널에서 명령을 실행합니다.


109

나는 얼마 전에 이것을 어딘가에서 읽었지만 그것을 찾을 수없는 것 같습니다. 터미널에서 명령을 실행 한 다음 결과를 출력하는 명령을 찾으려고합니다.

예 : 스크립트는 다음과 같습니다.

command 'ls -l'

터미널에서 해당 명령을 실행 한 결과가 나옵니다.

답변:


198

이를 수행하는 방법에는 여러 가지가 있습니다.

간단한 방법은 os 모듈을 사용하는 것입니다.

import os
os.system("ls -l")

하위 프로세스 모듈을 사용하면 더 복잡한 작업을 수행 할 수 있습니다. 예 :

import subprocess
test = subprocess.Popen(["ping","-W","2","-c", "1", "192.168.1.70"], stdout=subprocess.PIPE)
output = test.communicate()[0]

43
나는 당신을 비하하고 싶지 않지만. 모든 것에 하위 프로세스를 사용해야합니다. 훨씬 안전합니다. subprocess.call ()은 간단한 호출 양식을 대체하기위한 멋진 인터페이스를 제공합니다.
Jorge Vargas 2011 년

답장 주셔서 감사합니다. Ubuntu 데스크탑의 첫 번째 응용 프로그램에 파이썬을 사용할 것입니다. 이것은 정말 도움이 될 것입니다.
LinuxBill 2013 년

1
명령의 완전한 응답을 얻고 os.system("nslookup gmail.com")마지막 줄만 반환 0하지만 전체 응답을 얻으려면 어떻게해야합니까?
Parthapratim Neog 2015

3
@JorgeVargas 왜 하위 프로세스가 모든 작업에 사용되어야하는지 이해하도록 도와 줄 수 있습니까? 왜 더 안전한가요?
Soutzikevich

38

하위 프로세스 모듈 사용을 선호합니다.

from subprocess import call
call(["ls", "-l"])

이유는 스크립트에서 일부 변수를 전달하려는 경우 예를 들어 코드의 다음 부분을 취하는 매우 쉬운 방법을 제공하기 때문입니다.

abc = a.c
call(["vim", abc])

추가 매개 변수를 사용하여 사진을 열 때 잘 작동했습니다call(["eog", "1breeproposal.png", "-f"])
Josh


4

명령도 살펴 봐야합니다.

이것은 길이 2의 튜플을 반환합니다. 첫 번째는 반환 정수 (0-명령이 성공하면 0)이고 두 번째는 터미널에 표시되는 전체 출력입니다.

ls의 경우

    import commands
    s=commands.getstatusoutput('ls')
    print s
    >> (0, 'file_1\nfile_2\nfile_3')
    s[1].split("\n")
    >> ['file_1', 'file_2', 'file_3']

2
import os
os.system("echo 'hello world'")

작동합니다. 출력을 파이썬 셸에 인쇄하는 방법을 모르겠습니다.



1

Jupyter

jupyter 노트북에서 매직 기능을 사용할 수 있습니다. !

!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable

ipython

이것을 .py스크립트 로 실행하려면 다음 을 사용해야합니다.ipython

files = get_ipython().getoutput('ls -a /data/dir/')

스크립트 실행

$ ipython my_script.py

0

'os'모듈을 가져 와서 다음과 같이 사용할 수 있습니다.

import os
os.system('#DesiredAction')

0

python3의 경우 하위 프로세스 사용

import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.