SH는 시스템 프로그램을 Python 함수에 동적으로 매핑하는 고유한 하위 프로세스 래퍼입니다. SH는 Bash의 모든 기능(간단한 명령 호출, 간단한 파이프 전송)을 지원할 뿐만 아니라 Python의 유연성도 고려한 Python에서 셸 스크립트를 작성하는 데 도움이 됩니다.
SH는 모든 시스템 프로그램을 마치 함수인 것처럼 호출할 수 있게 해주는 Python의 성숙한 하위 프로세스 인터페이스입니다. 즉, SH를 사용하면 로그인 셸에서 실행할 수 있는 거의 모든 명령을 호출할 수 있습니다.
또한 명령 출력을 더 쉽게 캡처하고 구문 분석할 수 있습니다.
pip 명령을 통해 sh 설치
pip install sh
시작하고 실행하는 가장 쉬운 방법은 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")
명령은 함수처럼 호출됩니다.
그러나 "이것들은 실제 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
키워드 인수도 예상한 대로 작동합니다. 명령줄 인수 옵션으로 대체됩니다.
# 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")
"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에서는 더 많은 기능을 사용할 수 있으며 모두 찾을 수 있습니다. 공식 문서에서.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!