[英]Compare over directory and text file using Python
我的目標是比較兩個數據,一個來自文本文件,一個來自目錄,比較之后,這將通知或在控制台中顯示未找到的數據,例如:
ls: /var/patchbundle/rpms/:squid-2.6.STABLE21-7.el5_10.x86_64.rpm NOT FOUND!
ls: /var/patchbundle/rpms/:tzdata-2014j-1.el5.x86_64.rpm
ls: /var/patchbundle/rpms/:tzdata-java-2014j-1.el5.x86_64.rpm
ls: /var/patchbundle/rpms/:wireshark-1.0.15-7.el5_11.x86_64.rpm
ls: /var/patchbundle/rpms/:wireshark-gnome-1.0.15-7.el5_11.x86_64.rpm
ls: /var/patchbundle/rpms/:yum-updatesd-0.9-6.el5_10.noarch.rpm NOT FOUND
一定是那樣 所以這是我的python代碼。
import package, sys, os, subprocess
path = '/var/tools/tools/newrpms.txt'
newrpms = open(path, "r")
fds = newrpms.readline()
def checkrc(rc):
if(rc != 0):
sys.exit(rc)
cmd = package.Errata()
for i in newrpms:
rc = cmd.execute("ls /var/patchbundle/rpms/ | grep %newrpms ")
if ( != 0):
cmd.logprint ("%s not found !" % i)
checkrc(rc)
sys.exit(0)
newrpms.close
請參閱外殼腳本。 這個腳本執行文件,但是因為我想使用另一種語言,所以我嘗試使用python
retval=0
for i in $(cat /var/tools/tools/newrpms.txt)
do
ls /var/patchbundle/rpms/ | grep $i
if [ $? != 0 ]
then
echo "$i NOT FOUND!"
retval=255
fi
done
exit $retval
請查看我的Python代碼。 出問題了,因為它沒有像執行它的shell那樣執行。
您沒有說“ newrpms.txt”的內容是什么; 您說腳本沒有按照您的意願執行-但您沒有說腳本在做什么; 我不知道什么package
或package.Errata
是什么,所以我在猜問題。 但是很多事情是錯誤的。
if ( != 0):
是語法錯誤。 如果{empty space}不等於零?
cmd.execute("ls /var/patchbundle/rpms/ | grep %newrpms ")
可能沒有執行您想要的操作。 您不能像這樣在Python中的字符串中放置變量,並且如果可以的話, newrpms
是文件句柄而不是當前行。 那應該是...grep %s" % (i,))
嗎?
控制流程正在執行:
newrpms.close
沒做任何事情,它需要是newrpms.close()
才能調用close方法。
您正在用Python寫shell腳本。 怎么樣:
import os, sys
retval=0
for line in open('/var/tools/tools/newrpms.txt'):
rpm_path = '/var/patchbundle/rpms/' + line.strip()
if not os.path.exists(rpm_path):
print rpm_path, "NOT FOUND"
retval = 255
else:
print rpm_path
sys.exit(retval)
稍微編輯了一下代碼,並說明:
該代碼幾乎是將Shell腳本直接復制到Python中的。 它循環遍歷文本文件中的每一行,並調用line.strip()
在結尾處消除換行符。 它會生成rpm_path
,類似於“ /var/patchbundle/rpms/:tzdata-2014j-1.el5.x86_64.rpm”。
然后,它使用sys.path.exists()
來測試文件是否存在,如果存在則返回True,否則返回False,並使用該測試設置錯誤值並打印結果,就像shell腳本打印它們一樣。 這將替換代碼中的“ ls ... | grep”部分,以檢查文件是否存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.