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 osos.system("./test.sh")
hello python!
hello world!
n=os.system("./test.sh")hello python!
hello world!
nn>>8
2.2 os.popen(command):這種呼叫方式是通過管道的方式來實現,函式返回乙個file物件,
裡面的內容是指令碼輸出的內容(可簡單理解為echo輸出的內容),使用os.popen呼叫test.sh的情況:
import osos.popen("./test.sh")
f=os.popen("./test.sh")f
f.readlines()[『hello python!\n』, 『hello world!\n』]
3》像呼叫」ls」這樣的shell命令,應該使用popen的方法來獲得內容,對比如下:
import osos.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
n0
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指令碼的時候,又會有乙個工作目錄,這樣就很容易混淆。...