Python與shell命令互傳

2021-08-01 16:56:34 字數 4898 閱讀 5410

參考**:

#!/usr/bin/python

# -*- coding:utf-8 -*-

"""time:2023年5月23日17:01:38

author:zmy

intention:根據某個集市直接獲取需要遷移的清單

"""import os

import time

sum_line = 0

if __name__ == '__main__':

#獲取該mart_cmo下所有的列表:排除"partitions|.trash|data_export.db|.sparkstaging|.staging"這幾個清單

fr2 = os.popen('hdfs dfs -du -s hdfs: |sort -n -k1 |egrep -v "partitions|.trash|data_export.db|.sparkstaging|.staging"')

#此時的整個表清單上是個字串

content = fr2.read()

content_list = content.split("\n")

#該目錄用與存放最終的目錄

final_result =

#第一輪處理

middle_result1 =

for line in content_list:

if line:

big_location = line.split()

#獲取當前行的目錄大小和位置資訊

content_size = int(big_location[0])

content_location = str(big_location[1])

#5t的大小 = 5497558138880

if content_size < 5497558138880:

sum_line += 1

else:

#第二輪處理

#注意:此時line的形式為 大小 + 位置

middle_result2 =

for line in middle_result1:

if line:

location = line.strip()

os.environ['location'] = str(location)

fr2 = os.popen('hdfs dfs -du -s $location |sort -n -k1')

content_data = fr2.read()

#進行二次判斷

content2_list = content_data.split("\n")

for line in content2_list:

if line:

big_location = line.split()

#獲取當前行的目錄大小和位置資訊

content_size = int(big_location[0])

content_location = str(big_location[1])

# 5t的大小 = 5497558138880

if content_size < 5497558138880:

sum_line += 1

else:

#下面一行**包含大小和位置

#第三輪處理

#middle_result2當中存放的是目錄,注意:沒有對應的大小

middle_result3 =

for line in middle_result2:

if line:

location = line.strip()

os.environ['location'] = str(location)

fr3 = os.popen('hdfs dfs -du -s $location |sort -n -k1')

content_data = fr3.read()

#進行三次判斷

content3_list = content_data.split("\n")

for line in content3_list:

if line:

big_location = line.split()

#獲取當前行的目錄大小和位置資訊

content_size = int(big_location[0])

content_location = str(big_location[1])

# 5t的大小 = 5497558138880

if content_size < 5497558138880:

sum_line += 1

else:

#下面一行**包含大小和位置

#第四輪處理

#呵呵,經過第四輪處理後不知道會不會消失

middle_result4 =

for line in middle_result3:

if line:

location = line.strip()

os.environ['location'] = str(location)

fr4 = os.popen('hdfs dfs -du -s $location |sort -n -k1')

content_data = fr4.read()

#進行四次判斷

content4_list = content_data.split("\n")

for line in content4_list:

if line:

big_location = line.split()

#獲取當前行的目錄大小和位置資訊

content_size = int(big_location[0])

content_location = str(big_location[1])

# 5t的大小 = 5497558138880

if content_size < 5497558138880:

sum_line += 1

else:

#下面一行**包含大小和位置

#4輪過後我們在檢查一次

print("sum=%d"%sum_line)

print("4輪過後仍沒有被細化的列表:")

for line in middle_result4:

print("\033[45;1m%s\033[0m" % line)

line = "successful!"

print("\033[45;1m%s\033[0m"%(line))

#將最終的結果輸出到指定的檔案list當中

print("正在將最終的結果刷到list中")

fr5 = open("./list",mode="w",encoding="utf-8")

for line in final_result:

if line:

fr5.write(line+"\n")

fr5.close()

# 從結果集list中過濾出不含有dt=資訊的文字,並賦值給list1

print("正在從結果集當中過濾出含有dt分割槽的字段!")

os.system('more list | grep -v "dt=" > list1')

time.sleep(5)

# 從結果集list中過濾出含有dt=資訊的文字,並賦值給list2

print("正在從結果集當中過濾出不含有dt分割槽的字段!")

os.system('more list | grep "dt=" > list2')

time.sleep(5)

#對於list1,呼叫指令碼list.sh進行處理,形成第乙個結果集distcp.list

print("根據list列表中的清單構造10k對應的清單列表")

os.system('sh ./list.sh')

time.sleep(30)

#對於list2,進行文字格式的處理,只過濾出路徑即可。

fr6 = os.popen('more list2 |awk -f "/dt=" \'\'')

content6 = fr6.read()

content_list6 = content6.split("\n")

# 定義乙個set列表,用來去重

set_list =

for line in content_list6:

if line and line not

in set_list:

print("你好,需要手動處理的清單為:\033[42;1m%d\033[0m個" % (len(set_list)))

print("將需要手動處理的清單儲存到了distcp_handle.list文字中")

fr7 = open("./distcp_handle.list", mode="w", encoding="utf-8")

for line in set_list:

if line:

fr7.write(line + "\n")

"""當前目錄下各個檔案的作用:

1.transfer_help.py 總指令碼

2.list 所有需要遷移的清單

3.list1 不含有日期的清單

4.list2 含有日期的清單

5.distcp.list list1通過list.sh處理的結果,是第一批需要拷貝的清單結果

6.distcp_handle.list 需要手動進一步處理的清單

7. 本指令碼執行方法:/usr/local/bin/python3.2 transfer_help.py

8.在cmo1或者cmo2客戶端執行hdfs dfs -rmr hdfs://ns14/user/mart_cmo/temp/*/.distcp.tmp.attempt* 可以刪除*/目錄下distcp的冬冬

"""

互芯編譯命令

export path usr bin crosscompiler bin cygdrive c csdtk cooltools cygdrive c program files xoreax incredibuild make ct user fae ct target greenstone t0...

python執行shell命令

在此比較一下兩種方法執行系統命令的方法,以方便於日後運用 1.os.system system command exit status execute the command a string in a subshell.僅僅在乙個子終端執行系統命令,而不能獲取命令執行後的返回資訊.os.syste...

python呼叫shell命令

在python程式中呼叫shell命令 此函式會啟動子程序,在子程序中執行command,並返回command命令執行完畢後的退出狀態,如果command有執行內容,會在標準輸出顯示。這實際上是使用c標準庫函式system 實現的。缺點 這個函式在執行command命令時需要重新開啟乙個終端,並且無...