2013-10-10 66 views
0

我想在不經常使用python shell的情況下輕鬆測試我的python程序,因爲每次修改程序時都必須退出,重新進入python shell並再次導入程序。我正在使用OSX的2012 Macbook Pro。我有以下代碼:在不使用python shell的情況下測試python程序

import sys 

def read_strings(filename): 
    with open(filename) as file: 
     return file.read().split('>')[1:0] 

file1 = sys.argv[1] 
filename = read_strings(file1) 

基本上我想讀入和分裂包含txt文件:

ID1> ID2> ID3> ID4

我進入這個到我的命令行中:

pal-nat184-102-127:python_stuff ceb $ python3 program.py string.txt

但是,當我在命令行上嘗試sys.argv方法時,我的程序不會返回任何內容。這是測試代碼的好方法嗎,有人能指出我的方向嗎?

這是我想什麼情況發生:

PAL-nat184-102-127:python_stuff CEB $ python3 program.py string.txt

[ 'ID1', 'ID2', 'ID3', 'ID4']

+0

1.退出並重新導入哪裏? 2.是的,從shell運行腳本/測試套件是一種常用的測試方法。 3.當然,它不會返回任何東西,因爲你不告訴它返回任何東西 - 你期望的結果是什麼? – fjarri

回答

1

你永遠不會做的read_strings結果什麼。嘗試:

print(read_strings(file1)) 
+0

小調:在Python 3中,print不再是一個聲明,而是一個函數。您需要使用parens:print(read_strings(file1))而不是print read_strings(file1)。 –

+0

謝謝,我還沒有碰到Python 3,所以我非常感謝你! – Joseph

+0

我明白了。當我使用打印(read_strings(文件1))的輸出如下:[] ...但是我希望能得到這樣的輸出: 'ID1', 'ID2', 'ID3', 'ID4'。 – cebach561

2

讓我們這一塊在同一時間:

然而,當我嘗試在命令行上學習了sys.argv方法我 程序沒有返回

最後你的程序的結果是它將一個字符串寫入變量文件名。有一個程序「返回」一個值是有點奇怪的。一般來說,你想要一個程序打印出來,或者將某些東西保存到文件中。我猜如果您通過添加,修改您的程序,它會緩解您的調試

print (filename) 

最後:您將能夠看到您的程序的結果。

任何人都可以指出我正確的方向嗎?

另一個調試注意事項:編寫.py文件以便它們可以在命令行或python shell中獨立運行可能很有用。你目前如何構建你的代碼,這將工作得很差。 (啓動一個shell然後導入你的文件會導致錯誤,因爲sys.argv [1]沒有被定義。)

解決的辦法是改變你的代碼的底部如下:

if __name__ == '__main__': 
    file1 = sys.argv[1] 
    filename = read_strings(file1) 

的,如果守在上面說,「如果運行作爲一個獨立的腳本,然後運行什麼我下面如果你從其他地方引進了我,那麼不要執行下面的內容。「

如果我誤解了你的問題,歡迎隨時跟進。

相關問題