>백엔드 개발 >파이썬 튜토리얼 >Python3을 사용하여 Linux 스크립팅 기능 구현

Python3을 사용하여 Linux 스크립팅 기능 구현

anonymity
anonymity앞으로
2019-04-19 11:27:053989검색

Python 3는 Python 2와 비교하여 많은 변화가 있었습니다. Python 3은 Linux에서도 널리 사용됩니다. 여기서는 주로 Linux를 사용하는 Python 3 스크립트 실행 명령을 연습합니다.

먼저 실행만 필요하거나 실행 상태만 가져오면 되는 경우 os.system을 사용하여 위 코드를

#!/usr/bin/env python3
print ('hello,world')
import os
val2 =  os.system('cd trb && cd trb')
val3 = os.system('ls')
print('val2 is ',val2)

호출할 수 있습니다. val2의 코드가 성공적으로 실행되면, 즉 두 가지 수준의 trb 폴더가 있고 val2의 값은 0이고 그렇지 않으면 256입니다.

두 줄 호출에는 상속이 없습니다. 연속적으로 실행하려면 &&를 추가하세요. (쉘 구문)을 하나의 문장으로

인쇄하기 전에 화면에 실행 결과

hello,worldsh: line 0: cd: trb: 没有那个文件或目录
Abcd.py  automesh.sh  Cal_Ori  fold.txt  Linux_py_temp.py  meshedjob.rec  new_geom  onc143314  trb
val2 is  256

os.popen(cmd) 메소드도 표시되는데, 이는 작업의 출력만 가져올 수 있지만 인쇄하지 않으면 거기에 화면에는 아무것도 표시되지 않습니다.

예를 들어

val4 = os.popen('cd trb && cd trb')
val5 = os.popen('ls')print('开始PRINT')print(val4.read())print(val5.read())

는 다음과 같이 표시됩니다.

hello,world
开始PRINT/bin/sh: line 0: cd: trb: 没有那个文件或目录
Abcd.py
automesh.shCal_Ori
fold.txt
Linux_py_temp.py
meshedjob.rec
new_geom
onc143314
trb

여기서의 출력은 파일과 유사한 객체이며, read 또는 readlines를 호출하여 탐색할 수도 있습니다.

###########

궁극의 무기, 서브 프로세스

py3.5 서브 프로세스 이후 사용을 권장하는 모듈

온라인 튜토리얼의 명령은 버전 2의 기능으로 삭제되었습니다. 그러나 하위 프로세스를 통해 호출할 수 있습니다.

다음 명령을 사용할 수 있습니다:

subprocess.getstatusoutputsubprocess.getstatusoutputcmd 

在shell中返回执行cmd<span class="pre">(status, <span class="pre">output) 返回2个元素的元组</span></span>

3.4之后添加win支持

subprocess.getoutput ( cmd ) 쉘에서 실행

cmd

을 반환합니다. <span class="pre">(status, <span class="pre">output) 2개 요소의 튜플을 반환합니다</span></span>

3.4

하위 프로세스 이후에 win 지원을 추가합니다. getoutput

cmd

cmd를 실행하고 결과를 반환합니다.

legacycmd = subprocess.getstatusoutput('ls -l')print('subprocess.getstatusoutput 输出',legacycmd)
legacycmd2 = subprocess.getoutput('ls -l')print('subprocess.getoutput 输出',legacycmd2)
위는 코드입니다.

출력:

subprocess.getstatusoutput 输出 (0, &#39;总用量 48\n-rwxr--r-- 1 para036 bjpara  516 4月  16 2018 Abcd.py\n-rwxr--r-- 1 para036 bjpara 1619 4月  16 16:58                     automesh_onpsn_fortest.sh\n-rwxr--r-- 1 para036 bjpara 1616 4月  15 14:31 automesh.sh\ndrwxr-xr-x 5 para036 bjpara 4096 4月  15 14:31 Cal_Ori\n-rw-r                    --r-- 1 para036 bjpara   32 4月  16 16:56 fold.txt\n-rwxr--r-- 1 para036 bjpara 1530 4月  15 14:45 Linux_py_temp.py\n-rw-r--r-- 1 para036 bjpara   27                     4月  15 14:43 meshedjob.rec\ndrwxr-xr-x 2 para036 bjpara 4096 4月  15 14:31 new_geom\ndrwxr-xr-x 5 para036 bjpara 4096 4月  15 14:51 onc143314\ndrwx                    r-xr-x 5 para036 bjpara 4096 4月  16 17:05 onc16165650\ndrwxr-xr-x 5 para036 bjpara 4096 4月  16 16:46 onc163840\ndrwxr-xr-x 2 para036 bjpara 4096 4                    月  15 14:32 trb&#39;)
subprocess.getoutput 输出 总用量 48
-rwxr--r-- 1 para036 bjpara  516 4月  16 2018 Abcd.py
-rwxr--r-- 1 para036 bjpara 1619 4月  16 16:58 automesh_onpsn_fortest.sh
-rwxr--r-- 1 para036 bjpara 1616 4月  15 14:31 automesh.sh
drwxr-xr-x 5 para036 bjpara 4096 4月  15 14:31 Cal_Ori
-rw-r--r-- 1 para036 bjpara   32 4月  16 16:56 fold.txt
-rwxr--r-- 1 para036 bjpara 1530 4月  15 14:45 Linux_py_temp.py
-rw-r--r-- 1 para036 bjpara   27 4月  15 14:43 meshedjob.rec
drwxr-xr-x 2 para036 bjpara 4096 4月  15 14:31 new_geom
drwxr-xr-x 5 para036 bjpara 4096 4月  15 14:51 onc143314
drwxr-xr-x 5 para036 bjpara 4096 4月  16 17:05 onc16165650
drwxr-xr-x 5 para036 bjpara 4096 4月  16 16:46 onc163840
drwxr-xr-x 2 para036 bjpara 4096 4月  15 14:32 trb
출력은 끈. 인쇄되지 않으면 표시되지 않습니다.

새 버전에서는 일반적인 문제를 해결하려면 subprocess.run()을 사용하는 것이 좋습니다.

subprocess.run(), subprocess.call(), subprocess.check_call() 및 subprocess.check_output()은 모두 subprocess.Popen을 캡슐화하여 구현된 고급 함수이므로 더 복잡한 함수가 필요한 경우 subprocess를 통해 완료할 수 있습니다. Popen

run은 기본적으로 출력을 반환하지 않고 명령 및 실행 상태만

recomd = subprocess.run(['ls','-l'])#等待命令执行完成后会在屏幕输出执行结果,然后返回一个包含执行结果的CompletedProcess类的实例。print('输出recmd\n',recomd)print(recomd.returncode)
출력은 다음과 같습니다.

🎜🎜🎜 출력을 반환하려면 매개변수를 추가하고 subprocess.PIPE를 stdout 및 stderr에 전달하고, 그런 다음 반환된 CompletedProcess 클래스 인스턴스의 stdout 및 stderr 속성을 통해 해당 콘텐츠를 캡처할 수 있습니다. 🎜🎜🎜🎜universal_newlines: 🎜🎜 이 매개변수는 입력 및 출력 데이터 형식에 영향을 줍니다. 예를 들어 해당 값의 기본값은 False이고 stdout은 stdout 및 stderr의 출력은 바이트 시퀀스입니다. 이 매개변수의 값이 True로 설정되면 stdout 및 stderr의 출력은 문자열입니다. 🎜🎜전체 코드는 다음과 같습니다. 🎜
#!/usr/bin/env python3
print (&#39;hello,world&#39;)
import os
# val2 =  os.system(&#39;cd trb && cd trb&#39;)
# val3 = os.system(&#39;ls&#39;)
# print(&#39;val2 is &#39;,val2)
# val4 = os.popen(&#39;cd trb && cd trb&#39;)
# val5 = os.popen(&#39;ls&#39;)
# print(&#39;开始PRINT&#39;)
# print(val4.read())
# print(val5.read())
import subprocess
recomd = subprocess.run([&#39;ls&#39;,&#39;-l&#39;])
#等待命令执行完成后会在屏幕输出执行结果,然后返回一个包含执行结果的CompletedProcess类的实例。
print(&#39;输出recmd\n&#39;,recomd)
print(recomd.returncode)
print(&#39;传递参数&#39;)
recomdouterr = subprocess.run( [&#39;ls&#39;,&#39;-l&#39;],stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True)
print(&#39;输出outerr&#39;,recomdouterr.stdout,recomdouterr.stderr)
print(&#39;传递参数2&#39;)
recomdouterr = subprocess.run( [&#39;ls&#39;,&#39;-l&#39;],stdout=subprocess.PIPE,universal_newlines=True)
print(&#39;输出outerr&#39;,recomdouterr.stdout)
print(len( recomdouterr.stdout.strip().split(&#39;\n&#39;) ))
print(recomdouterr.stdout.strip().split(&#39;\n&#39;)[-1])
# legacycmd = subprocess.getstatusoutput(&#39;ls -l&#39;)
#
# print(&#39;subprocess.getstatusoutput 输出&#39;,legacycmd)
#
# legacycmd2 = subprocess.getoutput(&#39;ls -l&#39;)
#
# print(&#39;subprocess.getoutput 输出&#39;,legacycmd2)
🎜 참고 자료: python3.5 공식 문서: 🎜https://docs.python.org/3.5/library/subprocess.html🎜 🎜🎜Python이 점점 더 광범위하게 사용되고 있으며, Linux는 서버로서도 큰 잠재력을 가지고 있습니다. Python을 사용하여 Linux 스크립트 작업을 구현하면 서버 측 작업이 단순화되고 제어 가능성이 향상됩니다. 🎜

위 내용은 Python3을 사용하여 Linux 스크립팅 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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