python呼叫shell指令碼的兩種方法

2021-08-18 08:08:52 字數 2742 閱讀 8029

1.python呼叫shell指令碼,有兩種方法:os.system()和os.popen(),

前者返回值是指令碼的退出狀態碼,後者的返回值是指令碼執行過程中的輸出內容。

>>>help(os.system)

help on built-in function system in module posix:

system(...)

system(command) -> exit_status

execute the command (a string) in a subshell.

>>> help(os.popen)

help on built-in function popen in module posix:

popen(...)

popen(command [, mode='r' [, bufsize]]) -> pipe

open a pipe to/from a command returning a file object.

假定有乙個shell指令碼test.sh:

song@ubuntu:~$ vi test.sh

song@ubuntu:~$ more test.sh

#!/bin/bash

echo 'hello python!'

echo 'hello world!'

exit 1

song@ubuntu:~$

2.1os.system(command):該方法在呼叫完shell指令碼後,返回乙個16位的二進位制數,

低位為殺死所呼叫指令碼的訊號號碼,高位為指令碼的退出狀態碼,

即指令碼中exit 1的**執行後,os.system函式返回值的高位數則是1,如果低位數是0的情況下,

則函式的返回值是0x0100,換算為十進位制得到256。

要獲得os.system的正確返回值,可以使用位移運算(將返回值右移8位)還原返回值:

>>> 

import os

>>> os.system("./test.sh")

hello python!

hello world!

256>>> n=os.system("./test.sh")

hello python!

hello world!

>>> n

256>>> n>>8

1>>>

2.2os.popen(command):這種呼叫方式是通過管道的方式來實現,函式返回乙個file物件,

裡面的內容是指令碼輸出的內容(可簡單理解為echo輸出的內容),使用os.popen呼叫test.sh的情況:

>> import os

>>> os.popen("./test.sh")

'./test.sh', mode 'r' at 0x7f6cbbbee4b0>

>>> f=os.popen("./test.sh")

>>> f

'./test.sh', mode 'r' at 0x7f6cbbbee540>

>>> f.readlines()

['hello python!\n', 'hello world!\n']

>>>

3》像呼叫」ls」這樣的shell命令,應該使用popen的方法來獲得內容,對比如下:

>>> 

import os

>>> os.system("ls") #直接看到執行結果

desktop downloads music public templates videos

documents examples.desktop pictures systemexit.py test.sh

0#返回值為0,表示命令執行成功

>>> n=os.system('ls')

desktop downloads music public templates videos

documents examples.desktop pictures systemexit.py test.sh

>>> n

0>>> n>>8

#將返回值右移8位,得到正確的返回值

0>>> f=os.popen('ls') #返回乙個file物件,可以對這個檔案物件進行相關的操作

>>> f

'ls', mode 'r' at 0x7f5303d124b0>

>>> f.readlines()

['desktop\n', 'documents\n', 'downloads\n', 'examples.desktop\n', 'music\n', 'pictures\n', 'public\n', 'systemexit.py\n', 'templates\n', 'test.sh\n', 'videos\n']

>>>

總結:os.popen()可以實現乙個「管道」,從這個命令獲取的值可以繼續被使用。因為它返回乙個檔案物件,可以對這個檔案物件進行相關的操作。

但是如果要直接看到執行結果的話,那就應該使用os.system,用了以後,立竿見影!

Python 呼叫shell指令碼

python呼叫shell指令碼,有兩種方法 os.system cmd 或os.popen cmd 前者返回值是指令碼的退出狀態碼,後者的返回值是指令碼執行過程中的輸出內容。實際使用時視需求情況而選擇。現假定有乙個shell指令碼test.sh bin bash 1.echo hello worl...

python學習之 呼叫shell指令碼

python呼叫shell指令碼,有很多種方法,下面給出了三個python中執行shell命令的方法 第一種方案 os.system os.system返回指令碼的退出狀態碼 現有乙個shell指令碼1.sh bin sh echo hello world 在python中呼叫shell指令碼 修改...

python呼叫shell指令碼時需要切換目錄

最近遇到了乙個問題,就是python 呼叫shell指令碼時,發現輸入輸出的檔案,總是和自己預想的有偏差,但是單獨在linux下執行命令的時候,卻沒有錯誤。後來發現是相對路徑的問題,因為執行python檔案的時候,會有乙個工作目錄,而執行shell指令碼的時候,又會有乙個工作目錄,這樣就很容易混淆。...