1. python中的shell提示符是什麼意思
命令行的shell直接輸入你要輸入的東西就行。
Shell 循環
啟動 shell 時,它會立刻展示命令提示符並等待輸入。在接收到命令並執行完畢(細節會在後面講到)後,shell 會再次回到等待循環,准備接收下一條命令。
在shell.py中,我們通過主函數調用shell_loop()函數,來啟動循環。代碼如下:
然後在shell_loop()函數中,使用status標志來表示循環是否應該繼續。在循環開始時,shell 將立即顯示命令提示符,並等待輸入。
用戶在 shell 中鍵入命令並按下回車時,輸入的命令是一條長長的字元串,其中包含了命令名以及參數。因此,我們必須將其切分(將字元串拆分成多個 token)。
字元串切分乍一看很簡單。我們可能會使用cmd.split()根據空格來分割輸入的命令。對於形如ls -a my_folder的命令是奏效的,因為cmd.split()會將其拆分為一個列表 —['ls', '-a', 'my_folder』],這樣我們使用起來就比較容易了。
但是,某些情況下,某些參數會帶有單引號或者雙引號,比如echo "Hello World」或者echo 'Hello World』。如果我們使用cmd.split(), 將會得到一個包含三個 token 的列表 —['echo', '"Hello', 'World」』],而不是包含兩個 token 的列表 —['echo', 'Hello World』]。
2. python shell是什麼東西
python shell是Python的命令行。
shell中最常用的是ls命令,python對應的寫法是:os.listdir(dirname),這個函數返回字元串列表,裡面是所有的文件名,不過不包含」.」和」..」。
如果要遍歷整個目錄的話就會比較復雜一點,在解釋器里試一下:
>>> os.listdir(」/」)
[』tmp』, 『misc』, 『opt』, 『root』, 『.autorelabel』, 』sbin』, 』srv』,『.autofsck』, 『mnt』, 『usr』, 『var』, 『etc』, 』selinux』, 『lib』, 『net』,『lost+found』, 』sys』, 『media』, 『dev』, 『proc』, 『boot』, 『home』, 『bin』]
就像這樣,接下去所有命令都可以在python的解釋器里直接運行觀看結果。
(2)pythonshell命令行參數擴展閱讀:
python shell對應於shutil.(src,dest),這個函數有兩個參數,參數src是指源文件的名字,參數dest則是目標文件或者目標目錄的名字。
如果dest是一個目錄名,就會在那個目錄下創建一個相同名字的文件。與shutil.函數相類似的是shutil.2(src,dest),不過2還會復制最後存取時間和最後更新時間。
不過,shell的cp命令還可以復制目錄,python的shutil.卻不行,第一個參數只能是一個文件。
其實,python還有個shutil.tree(src,dst[,symlinks])。參數多了一個symlinks,它是一個布爾值,如果是True的話就創建符號鏈接。
移動或者重命名文件和目錄,shutil.move(src,dst),與mv命令類似,如果src和dst在同一個文件系統上,shutil.move只是簡單改一下名字,如果src和dst在不同的文件系統上,shutil.move會先把src復制到dst,然後刪除src文件。
3. python中怎麼運行shell腳本
python中怎麼運行shell腳本?
system()
其中最後一個0是這個命令的返回值,為0表示命令執行成功。使用system無法將執行的結果保存起來。
popen()
獲取命令執行的結果,但是沒有命令的執行狀態,這樣可以將獲取的結果保存起來放到pst中。
commands
可以很方便的取得命令的輸出(包括標准和錯誤輸出)和執行狀態位。
commands.getoutput('ls')這個方法只返回執行結果result不返回狀態。
在python中調用shell腳本
hello.sh
下面的512是返回的狀態碼,如果eixt 0時則返回的是0.
shell腳本使用python腳本的參數
寫一個hello.sh腳本,需要傳入兩個參數:
執行結果如下:
在python腳本中調用shell腳本,並傳入參數,注意參數前後要有空格
執行python腳本
相關推薦:《Python教程》以上就是小編分享的關於python中怎麼運行shell腳本的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
4. 我希望通過Python腳本實現多次執行shell命令
python腳本實現多次循環執行shell命令有三種方法,代碼如下:
#方法一
os.system
importos
i=0
whileTrue:
i=i+1
os.system("tcpreplay-ibond0-M5-l1oracle_request_response.cap")
print"+++++++++++++++++++++++++++++++"
print"times:",i
time.sleep(5)
#方法二
os.popen
importos
i=0
whileTrue:
i=i+1
printos.popen("tcpreplay-ibond0-M5-l1oracle_request_response.cap").read()
print"+++++++++++++++++++++++++++++++"
print"times:",i
time.sleep(60)
#方法三
output=Popen("xxx",shell=True).communicate()[0]
importos
fromsubprocessimport*
i=0
whileTrue:
i=i+1
output=Popen("tcpreplay-ibond0-M5-l1oracle/*",shell=True).communicate()[0]
print"+++++++++++++++++++++++++++++++"
print"times:",i
time.sleep(60)
5. python 調用shell命令是非同步的么
代碼如下:
output = os.popen('cat /proc/cpuinfo')
print output.read()
通過 os.popen() 返回的是 file read 的對象,對其進行讀取 read() 的操作可以看到執行的輸出。但是無法讀取程序執行的返回值)
嘗試第三種方案 commands.getstatusoutput() 一個方法就可以獲得到返回值和輸出,非常好用。
6. python shell 中怎麼實現清屏
Python Shell有兩種方式,分別為「Windows命令行窗口」和「IDLE」
「命令行窗口」下可以通過如下兩種方法:
1. import subprocess
subprocess.call("clear") # linux/mac
subprocess.call("cls", shell=True) # windows
執行完次命令後,窗口頂部第一行會出現一個0,接下來才會是輸入提示符「>>>」
消除這個0的方法是在此命令前添加一個變數,例如 i=subprocess.call("cls", shell=True)
2. import os
os.system("cls") # windows
os.system("clear") # linux
執行完次命令後,窗口頂部第一行也會出現一個0,接下來才會是輸入提示符「>>>」
消除這個0的方法同方法1
「IDLE」下以上兩種方式都不起作用,可以通過建立如下函數實現:
1、偽清屏
def cls():
print "
"*80 #Shell 3.0+ 改為 print(('
'*80))
此函數將命令行往下移動80行,數字80可以自己任意設定
這是偽清屏,只是輸入滿屏的空格而已
2、插件法
首先下載clearwindow.py,將這個文件放在Python XLibidlelib目錄下(X為python版本),然後在這個目錄下找到config-extensions.def這個文件(idle擴展的配置文件),以記事本的方式打開它(為防止出錯,可以在打開它之前先一個備份)。打開config-extensions.def 後在句末加上這樣幾句:
[ClearWindow]
enable=1
enable_editor=0
enable_shell=1
[ClearWindow_cfgBindings]
clear-window=<Control-Key-l>
然後保存退出即可。
打開python的idle,看看options是不是多了一個選項clear shell window ctrl+L
如果是這樣的話,那就證明安裝成功了,以後要清屏直接ctrl+L就可以了
附clearwindow.py代碼:
classClearWindow:
menudefs=[
('options',[None,
('ClearShellWindow','<<clear-window>>'),
]),]
def__init__(self,editwin):
self.editwin=editwin
self.text=self.editwin.text
self.text.bind("<<clear-window>>",self.clear_window2)
self.text.bind("<<undo>>",self.undo_event)#add="+"doesn'twork
defundo_event(self,event):
text=self.text
text.mark_set("iomark2","iomark")
text.mark_set("insert2","insert")
self.editwin.undo.undo_event(event)
#fixiomarkandinsert
text.mark_set("iomark","iomark2")
text.mark_set("insert","insert2")
text.mark_unset("iomark2")
text.mark_unset("insert2")
defclear_window2(self,event):#Alternativemethod
#
text=self.text
text.undo_block_start()
text.mark_set("iomark2","iomark")
text.mark_set("iomark",1.0)
text.delete(1.0,"iomark2linestart")
text.mark_set("iomark","iomark2")
text.mark_unset("iomark2")
text.undo_block_stop()
ifself.text.compare('insert','<','iomark'):
self.text.mark_set('insert','end-1c')
self.editwin.set_line_and_column()
defclear_window(self,event):
#removeundodelegator
undo=self.editwin.undo
self.editwin.per.removefilter(undo)
#clearthewindow,butpreservecurrentcommand
self.text.delete(1.0,"iomarklinestart")
ifself.text.compare('insert','<','iomark'):
self.text.mark_set('insert','end-1c')
self.editwin.set_line_and_column()
#restoreundodelegator
self.editwin.per.insertfilter(undo)
7. python shell怎麼使用
Python 中執行 Shell 命令有多種方法,stackoverflow 上有對這些方法進行比較的討論,Calling an external command in Python 指出使用subprocess模塊來實現更優。因此,本文說明如何使用subprocess模塊來實現 Shell 腳本的功能。
subprocess模塊提供多種方法來實現執行 Linux 的命令,例如subprocess.call()方法,subprocess.check_call()方法,等。這些方法都是對Popen類的封裝,故本文著重講述Popen類的使用。
執行 Shell 命令
可以通過向Popen()傳遞需要執行的命令來創建一個Popen對象,這樣,便會創建一個子進程來執行命令。例如:
child = subprocess.Popen(["ping","-c","5","leehao.me"])
1
上面的代碼會創建一個子進程來執行ping -c 5 leehao.me命令,這個命令採用列表的形式傳遞給Popen()方法。如果我們想直接採用ping -c 5 leehao.me字元串形式,可以添加shell=True來實現:
child = subprocess.Popen("ping -c 5 leehao.me", shell=True)
1
官方文檔指出由於安全原因故不建議使用shell=True,詳細說明可以參考官方文檔的描述。
等待子進程執行
子進程執行命令後,主進程並不會等待子進程執行。為了讓主進程等待子進程執行結束,需要顯示調用Popen.wait()方法。例如:
child = subprocess.Popen(["ping","-c","5","leehao.me"])
child.wait()
print 'parent finish'
1
2
3
這樣,主進程會等待子進程執行ping命令完畢後,才會列印出parent finish的輸出。
獲取執行結果
為了獲取Popen()子進程的輸出,可以使用Popen.communicate()方法,例如:
def subprocess_cmd(command):
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
proc_stdout = process.communicate()[0].strip()
print proc_stdout
subprocess_cmd('echo leehao.me; echo www.leehao.me')
1
2
3
4
5
6
輸出:
leehao.me
www.leehao.me
process.communicate()方法可以實現主進程與子進程的通信。主進程可以通過它向子進程發送數據,也可以讀取子進程的輸出的數據。上面的例子中,我們在創建Popen對象時指定stdout=subprocess.PIPE,這樣主進程便可以讀取子進程的輸出。
communicate()方法返回一個元組:(stdoutdata, stderrdata),process.communicate()[0]即獲取子進程的標准輸出。
需要指出的是,調用communicate()方法後,主進程也會等待子進程執行完畢。
上面的例子中,子進程向標准輸出列印兩個字元串,主進程接收到了這些輸出,並列印出來。
8. python執行shell命令
Python執行Linux系統命令,即在Python腳本中調用Shell命令,具體有以下四種方法:
1、os.system
//僅僅在一個子終端運行系統命令,而不能獲取命令執行後的返回信息
system(command)->exit_status
Executethecommand(astring)inasubshell.
//如果再命令行下執行,結果直接列印出來:
>>>os.system('ls')
04101419778.CHMbashdocumentmediapy-djangovideo
11.
all-
2、os.popen
//該方法不但執行命令還返回執行後的信息對象
popen(command[,mode='r'[,bufsize]])->pipe
Openapipeto/.
3、使用模塊 subprocess
>>>importsubprocess
>>>subprocess.call(["cmd","arg1","arg2"],shell=True)
//獲取返回和輸出:
importsubprocess
p=subprocess.Popen('ls',shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
forlineinp.stdout.readlines():
printline,
retval=p.wait()
4、使用模塊 commands
>>>importcommands
>>>dir(commands)
['__all__','__builtins__','__doc__','__file__','__name__','getoutput','getstatus','getstatusoutput','mk2arg','mkarg']
>>>commands.getoutput("date")
'WedJun1019:39:57CST2009'
>>>
>>>commands.getstatusoutput("date")
(0,'WedJun1019:40:41CST2009')
9. python中 subprocess shell=False 與shell=True的區別
shell=True參數會讓subprocess.call接受字元串類型的變數作為命令,並調用shell去執行這個字元串,當shell=False是,subprocess.call只接受數組變數作為命令,並將數組的第一個元素作為命令,剩下的全部作為該命令的參數。
舉個例子來說明:
fromsubprocessimportcall
importshlex
cmd="cattest.txt;rmtest.txt"
call(cmd,shell=True)
上述腳本中,shell=True的設置,最終效果是執行了兩個命令
cat test.txt 和 rm test.txt
把shell=True 改為False,
fromsubprocessimportcall
importshlex
cmd="cattest.txt;rmtest.txt"
cmd=shlex(cmd)
call(cmd,shell=False)
則調用call的時候,只會執行cat的命令,且把 "test.txt;" "rm" "test.txt" 三個字元串當作cat的參數,所以並不是我們直觀看到的好像有兩個shell命令了。
也許你會說,shell=True 不是很好嗎,執行兩個命令就是我期望的呀。但其實,這種做法是不安全的,因為多個命令用分號隔開,萬一檢查不夠仔細,執行了危險的命令比如 rm -rf / 這種那後果會非常嚴重,而使用shell=False就可以避免這種風險。
總體來說,看實際需要而定,官方的推薦是盡量不要設置shell=True。
10. python和shell有什麼區別
1、Python不需要記憶太多的命令,語法簡單,有C基礎的人學起來非常容易上手,易於使用;而shell要學的命令有很多,但常用的命令不是很多。
2、Python可移植性好,它的標準是統一的,不會出現因為平台的不同運行結果不同,但shell的命令在各個平台上有些不一樣。
3、Python更加強大,shell是一種命令語言,同時也可以看成是一個命令解釋器,用於接收諸如awk、sed的命令調用等完成相關的功能。而Python則是一種編程語言,Python提供給程序員更大的自由度和靈活性,以完成shell所不能完成或者難於完成的編碼任務,如實現面向對象的模塊化設計、操作伺服器資料庫等。
4、Python支持面向對象、支持可擴展性和可嵌入性,同時提供了功能豐富的庫。
5、性能方面,很明顯地,Python的執行效率要高於shell,有一個很充分的理由就是shell本身的各種進程間IPC通信要造成相當大的開銷;而Python底層是C語言實現的,其性能可以接近於C,但具體相同功能的Python代碼量卻要比C短很多倍,因此Python的性能高於shell。