将模块作为脚本执行

7 投票
1 回答
15621 浏览
提问于 2025-04-16 03:40

我现在正在学习Python,今天遇到了一个问题,具体内容在这个链接里:

http://docs.python.org/release/2.5.4/tut/node8.html

6.1.1 将模块作为脚本执行

当你用下面的命令运行一个Python模块时:

python fibo.py <参数>

模块里的代码会被执行,就像你导入它一样,不过这时它的__name__会被设置为"__main__"。这意味着,如果你在模块的最后加上这段代码:

    if __name__ == "__main__":
        import sys
        fib(int(sys.argv[1]))

你就可以让这个文件既可以作为脚本使用,也可以作为可导入的模块,因为只有当模块作为“主”文件执行时,解析命令行的代码才会运行:

$ python fibo.py 50 1 1 2 3 5 8 13 21

这时会输出34

但是当我在命令行中这样做时,我得到了:

File "<input>", line 1
python fibo.py 222
SyntaxError: invalid syntax

那我该怎么正确执行这个脚本呢?

fibo.py的内容是:

    def fib(n):
        a,b=0,1
        while b<n:
            print b,
            a,b = b,a+b
            
            
    def fib2(n):
        result=[]
        a,b=0,1
        while b<n:
            result.append(b)
            a,b=b,a+b
        return result
    
    if __name__ =="__main__":
        import sys
        fib(int(sys.argv[1]))

1 个回答

13

你在命令行里到底做了什么?你运行的是什么代码?

听起来你在脚本里犯了个错误——可能是漏掉了冒号,或者缩进不对。如果不看到你运行的文件,就没法说得更具体。

补充:

我已经搞清楚问题出在哪里了。你是在Python的命令行里运行python fibo.py 222。我这样做的时候也会出现同样的错误:

[138] % python
Python 2.6.1 (r261:67515, Apr  9 2009, 17:53:24)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> python fibo.py 222
  File "<stdin>", line 1
    python fibo.py 222
              ^
SyntaxError: invalid syntax
>>>

你需要从操作系统的命令行提示符运行它,而不是在Python的交互式命令行里。

首先确保你切换到Python的安装目录。例如,在操作系统的命令行里输入:cd C:\Python33\ ——这要根据你的Python版本来定。我的是3.3。然后输入:python fibo.py 200 (比如说)

撰写回答