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