linuxpython重定向_linux命令重定向、、 1、 2、 1、 2、
重定向命令其實用得不少吧,只是重來都沒有仔細看過,這波正好又用到 又有空總結一波。
先看>和>>:
他們倆其實唯一的區別就是>是重定向到一個文件,>>是追加內容到文件。兩個命令都是如果文件不存在則創建文件。舉個例子來看看:
(thrift_rpc)piperck? Desktop ? ll >> 123.txt
(thrift_rpc)piperck? Desktop ? ll| grep 123.txt-rw-r--r-- 1 piperck staff 2.8K Dec 25 00:24 123.txt
可以看到可以將ll的輸出 重定向到123.txt中, >也是同樣的效果。只是如果使用>執行重定向的位置沒有這個文件
(thrift_rpc)piperck? Desktop ? ls > /poweqpikp/123zsh: no suchfile or directory: /poweqpikp/123(thrift_rpc)piperck? Desktop ?ls >> /poweqpikp/123zsh: no suchfile or directory: /poweqpikp/123(thrift_rpc)piperck? Desktop ?ls > 123(thrift_rpc)piperck? Desktop ?ls >> 1234
但是如果你重定向的是沒有的文件夾里面的文件,那么文件夾他是不會幫你創建的,所以會報出錯誤,這點要注意。
然后是?1>、 2>、 1>>、 2>>的使用,
當我們需要把一個文件正確的輸出,和錯誤的輸出分開保存的時候就能用到他們啦。讓我用一個簡單的python腳本來做一個實驗
python腳本如下
#coding: utf-8
if __name__ == '__main__':print 'gogogog'int('qiowjeioqwjeo')
該腳本會正確執打印gogogog 然后 報出下面強轉的錯誤。
(thrift_rpc)piperck? py_pra ? python pp.py 1> right.txt 2>wrong.txt
(thrift_rpc)piperck? py_pra ? ls
NS8A_client gevent pp.py starcraft2
baidu_phoneassist laplace_pra right.txt wrong.txt
(thrift_rpc)piperck? py_pra ? cat right.txt
gogogog
(thrift_rpc)piperck? py_pra ? cat wrong.txt
Traceback (most recent call last):
File"pp.py", line 6, in int('qiowjeioqwjeo')
ValueError: invalid literalfor int() with base 10: 'qiowjeioqwjeo'
可以看到,正確的輸出被保存進了right.txt 而錯誤的輸出被重定向到了wrong.txt 。
那么如果我們不區分1>2>這樣的重定向規則,運行結果會被保存成什么樣子呢?
(thrift_rpc)piperck? py_pra ? python pp.py >pp.txt
Traceback (most recent call last):
File"pp.py", line 6, in int('qiowjeioqwjeo')
ValueError: invalid literalfor int() with base 10: 'qiowjeioqwjeo'(thrift_rpc)piperck? py_pra ? cat pp.txt
gogogog
可以看到只保存了正確的結果,錯誤的信息被打印到標準輸出上面。
那如果我們想讓錯誤和正確的結果都被重定向到同一個文件又應該怎么做呢。
(thrift_rpc)piperck? py_pra ? python pp.py 1> ppp.txt 2>&1(thrift_rpc)piperck? py_pra ? cat ppp.txt
gogogog
Traceback (most recent call last):
File"pp.py", line 6, in int('qiowjeioqwjeo')
ValueError: invalid literalfor int() with base 10: 'qiowjeioqwjeo'
可以看到,我們將錯誤也重定向到和1相同的文件 就實現了這個需求。
同理1>> 2>>其實也就是追加數據到文件中,和前面介紹的> >>沒有什么不同,需要提到的一點是,如果我們想將錯誤的和正確的信息重定向追加到同一個文件應該怎么做呢?你可能會想到2>>&1。。。然而現實是,并沒有這個語法。
然而我們卻可以使用1>>pp.txt 2>&1的語法實現這個功能
(thrift_rpc)piperck? py_pra ? python pp.py 1>> pp.txt 2>&1(thrift_rpc)piperck? py_pra ? cat pp.txt
gogogog
gogogog
Traceback (most recent call last):
File"pp.py", line 6, in int('qiowjeioqwjeo')
ValueError: invalid literalfor int() with base 10: 'qiowjeioqwjeo'gogogog
Traceback (most recent call last):
File"pp.py", line 6, in int('qiowjeioqwjeo')
ValueError: invalid literalfor int() with base 10: 'qiowjeioqwjeo'
可見看似1> 1>> 2> 2>>是相一一對應的,但是其實不是,他們可以混用,比方說正確的結果想追加,錯誤的結果我想覆蓋。
(thrift_rpc)piperck? py_pra ? python pp.py 1>>right.txt 2>wrong.txt
(thrift_rpc)piperck? py_pra ? cat right.txt
gogogog
(thrift_rpc)piperck? py_pra ? cat wrong.txt
Traceback (most recent call last):
File"pp.py", line 6, in int('qiowjeioqwjeo')
ValueError: invalid literalfor int() with base 10: 'qiowjeioqwjeo'(thrift_rpc)piperck? py_pra ? python pp.py1>>right.txt 2>wrong.txt(thrift_rpc)piperck? py_pra ? cat right.txt
gogogog
gogogog
(thrift_rpc)piperck? py_pra ? cat wrong.txt
Traceback (most recent call last):
File"pp.py", line 6, in int('qiowjeioqwjeo')
ValueError: invalid literalfor int() with base 10: 'qiowjeioqwjeo'
類似這種組合混用的情況,相對來說也不少見。也可以看出重定向標識的靈活性。
那么如果我們想保存正確的結果,錯誤的結果直接丟向垃圾站,既不保存為文件,也不在標準輸出打印又該怎么做呢?
(thrift_rpc)piperck? py_pra ? python pp.py 1>>right.txt 2>/dev/null
(thrift_rpc)piperck? py_pra ? cat right.txt
gogogog
gogogog
gogogog
直接將錯誤輸出重定向到/dev/null 就好了,他就像一個無底洞,丟進去的東西就不見了。
那么
(thrift_rpc)piperck? py_pra ? vi hh
(thrift_rpc)piperck? py_pra ?>> txt.py
(thrift_rpc)piperck? py_pra ? cat txt.py
qwejqwoijeoq
靈活使用重定向標識符 將極大方便我們日常對系統的操作,和靈活控制腳本的運作,所以一定要掌握喲!
Reference:
http://blog.chinaunix.net/uid-298599-id-2443108.html ??Linux - 命令重定向
總結
以上是生活随笔為你收集整理的linuxpython重定向_linux命令重定向、、 1、 2、 1、 2、的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新手怎么开宠物店 明白文章里的技巧就是
- 下一篇: 信用卡拒收会有影响吗