2012-07-14 215 views
-2

我正在嘗試從process()內調用two_byte_proc(有效內容,偏移量),但它不寫入輸出文件out_buf。偏移或有效負載的輸出可能包含無,因此應該跳過這些迭代,並用下一個數據包重新啓動處理函數。從函數內部調用Python函數

def process(): 
    pkts = sniff(offline="infile.pcap",filter="tcp") 
    out_buf = open("outfile.bin","wb") 

    for pkt in pkts: 
     offset = hexdump(str(pkt.payload)[:2]) 
     payload = hexdump(pkt.payload) 

     if offset or payload is None: 
      pass 
     else: 
      out_buf.write(two_byte_proc(payload,offset)) 

process() 
+2

函數'two_byte_proc'是什麼?它在哪裏定義?另外,你是什麼意思,它不起作用。如果它沒有產生錯誤,它會做什麼讓你認爲它不起作用? – BrenBarn 2012-07-14 20:39:53

+0

這可以重寫爲'如果偏移量不是無,有效負載也不是無。 – Ryan 2012-07-14 20:42:19

+1

或者如果不是(偏移或有效載荷):',這更接近原始的簡潔性。 (假設'offset'和'payload'永遠不會像''「'那樣是你想輸出的」falsey「值(如果這是一個問題,'如果None(in offset,payload):'也是簡潔的,但是清除。) – millimoose 2012-07-14 20:44:46

回答

4

表達式offset or payload is None總是爲真;也許你的意思是:

if offset is None or payload is None: 

改爲。

自從你「通過」,如果該表達式爲真,則可能以及扭轉它:

if offset is not None and payload is not None: 
    out_buf.write(two_byte_proc(payload, offset)) 

我懷疑offset和​​是長度> 0或無任一字符串,在這種情況下,可以進一步簡化爲:

if offset and payload: 
    out_buf.write(two_byte_proc(payload, offset)) 

最後但並非最不重要的,你需要確保two_byte_proc(或four_byte_proc你的編輯之後)實際上回報寫給out_buf的東西。例如,如果它返回的是一個空字符串,則不會看到任何結果。

+0

我用你的反饋更新了這個問題,但是根據更新的問題,函數沒有寫入文件,因爲它應該是。 – Astron 2012-07-14 20:56:15

+0

'offset or有效載荷爲無「實際上並非總是如此;特別是當'offset'爲false並且'payload'是'None'以外的時候它將是錯誤的。也就是說,邏輯仍然不是預期的。 – 2012-07-14 23:36:28

+0

@KarlKnechtel:我覺得對陳述的邏輯進行嚴格的細節並不會有幫助。 OP(像很多初次程序員一樣)誤解了邏輯運算符的組合方式,這就是所有需要進行通信的東西。 – 2012-07-15 08:49:55