>백엔드 개발 >파이썬 튜토리얼 >Python 쉘 스크립트를 사용하는 방법

Python 쉘 스크립트를 사용하는 방법

王林
王林앞으로
2023-05-11 10:25:052455검색

1. sh

SH는 시스템 프로그램을 Python 함수에 동적으로 매핑하는 고유한 하위 프로세스 래퍼입니다. SH는 Bash의 모든 기능(간단한 명령 호출, 간단한 파이프 전송)을 지원할 뿐만 아니라 Python의 유연성도 고려한 Python에서 셸 스크립트를 작성하는 데 도움이 됩니다.

SH는 모든 시스템 프로그램을 마치 함수인 것처럼 호출할 수 있게 해주는 Python의 성숙한 하위 프로세스 인터페이스입니다. 즉, SH를 사용하면 로그인 셸에서 실행할 수 있는 거의 모든 명령을 호출할 수 있습니다.

또한 명령 출력을 더 쉽게 캡처하고 구문 분석할 수 있습니다.

2. 사용 단계

1. 설치

pip 명령을 통해 sh 설치

pip install sh

2. 예제 사용

시작하고 실행하는 가장 쉬운 방법은 sh를 직접 가져오거나 sh에서 필요한 명령을 가져오는 것입니다. 그런 다음 명령을 Python 함수처럼 사용할 수 있습니다.

예를 들어, 매개변수를 전달하고, 출력을 캡처하고, Python에서 출력을 사용합니다. 자세한 내용은 아래 코드 예제를 참조하세요

# get interface information
import sh
print sh.ifconfig("eth0")

from sh import ifconfig
print ifconfig("eth0")

# print the contents of this directory
print ls("-l")

# substitute the dash for an underscore for commands that have dashes in their names
sh.google_chrome("http://google.com")

하위 명령을 작성하는 두 가지 방법

# 子命令
>>> from sh import git, sudo
>>> print(git.branch("-v"))
>>> print(git("branch", "-v"))
>>> print(sudo.ls("/root"))
>>> print(sudo("/bin/ls", "/root"))

# with 环境
>>> with sh.contrib.sudo(_with=True):
        print(ls("/root"))
# _with=True 关键字告诉命令它正处于 with 环境中, 以便可以正确地运行.

#将多个参数传递给命令时,每个参数必须是一个单独的字符串:

from sh import tar
tar("cvf", "/tmp/test.tar", "/my/home/directory/")
# 这将不起作用:

from sh import tar
tar("cvf /tmp/test.tar /my/home/directory")

3. sh를 사용하여 명령을 실행하세요

명령은 함수처럼 호출됩니다.

그러나 "이것들은 실제 Python 함수가 아닙니다. 실제로 실행되는 것은 시스템의 해당 바이너리 명령입니다. Bash와 마찬가지로 PATH를 구문 분석하여 시스템에서 동적으로 실행됩니다.

이 때문에 Python은 셸 명령에 대한 지원은 매우 훌륭하며 시스템의 모든 명령은 Python을 통해 쉽게 실행할 수 있습니다.”

많은 프로그램에는 git(branch, checkout)과 같은 자체 명령 하위 집합이 있습니다.

sh는 속성 액세스를 통해 하위 명령을 처리합니다.

from sh import git

# resolves to "git branch -v"
print(git.branch("-v"))

print(git("branch", "-v")) # the same command

4. 키워드 인수

키워드 인수도 예상한 대로 작동합니다. 명령줄 인수 옵션으로 대체됩니다.

# Resolves to "curl http://duckduckgo.com/ -o page.html --silent"
sh.curl("http://duckduckgo.com/", o="page.html", silent=True)

# If you prefer not to use keyword arguments, this does the same thing
sh.curl("http://duckduckgo.com/", "-o", "page.html", "--silent")

# Resolves to "adduser amoffat --system --shell=/bin/bash --no-create-home"
sh.adduser("amoffat", system=True, shell="/bin/bash", no_create_home=True)

# or
sh.adduser("amoffat", "--system", "--shell", "/bin/bash", "--no-create-home")

5. 명령 찾기

"Which"는 프로그램의 전체 경로를 찾고, 존재하지 않으면 None을 반환합니다. 이 명령은 실제로 Python 함수로 구현되는 몇 안 되는 명령 중 하나이므로 실제 "어떤" 바이너리에 의존하지 않습니다.

print sh.which("python")     # "/usr/bin/python"
print sh.which("ls")         # "/bin/ls"

if not sh.which("supervisorctl"): sh.apt_get("install", "supervisor", "-y")

sh에서는 더 많은 기능을 사용할 수 있으며 모두 찾을 수 있습니다. 공식 문서에서.

6.Baking 매개변수

sh는 "baking" 매개변수를 명령으로 사용할 수 있으며, 이는 다음 코드에 표시된 대로 해당 전체 명령줄 문자열을 출력하는 것입니다.

# The idea here is that now every call to ls will have the “-la” arguments already specified.
from sh import ls

ls = ls.bake("-la")
print(ls) # "/usr/bin/ls -la"

# resolves to "ls -la /"
print(ls("/"))

ssh+baking command

In "bake"에서 "bake"를 호출하는 명령은 "bake"에 전달된 모든 인수를 자동으로 전달하는 호출 가능한 객체를 생성합니다.

# Without baking, calling uptime on a server would be a lot to type out:
serverX = ssh("myserver.com", "-p 1393", "whoami")

# To bake the common parameters into the ssh command
myserver = sh.ssh.bake("myserver.com", p=1393)

print(myserver) # "/usr/bin/ssh myserver.com -p 1393"

이제 "myserver"를 호출하여 베이킹 SSH 명령을 나타낼 수 있습니다.

# resolves to "/usr/bin/ssh myserver.com -p 1393 tail /var/log/dumb_daemon.log -n 100"
print(myserver.tail("/var/log/dumb_daemon.log", n=100))

# check the uptime
print myserver.uptime()
 15:09:03 up 61 days, 22:56,  0 users,  load average: 0.12, 0.13, 0.05

위 내용은 Python 쉘 스크립트를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제