2013-10-10 65 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) 

的,如果守在上面说,“如果运行作为一个独立的脚本,然后运行什么我下面如果你从其他地方引进了我,那么不要执行下面的内容。“

如果我误解了你的问题,欢迎随时跟进。

相关问题