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

2021-10-01 16:04:25 字數 2667 閱讀 1173

os.system()和os.popen()

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.1 os.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!

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

hello python!

hello world!

n

n>>8

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

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

import os

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

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

f

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

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指令碼的時候,又會有乙個工作目錄,這樣就很容易混淆。...