如何在Linux导入特殊环境的python shell中执行python程序

时间:2014-12-03 14:49:19

标签: python

我使用一块名为AMUSE的天体物理软件,它使用python命令行。我已经获得了在终端中导入的二进制版本。现在,如果我想在任何目录中运行已保存的python程序,我该怎么称呼它?

以前我用过终端

python first.py 
pwd=secret;database=master;uid=sa;server=mpilgrim

first.py看起来像这样

def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""
    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }
    print buildConnectionString(myParams)

我的代码工作正常,现在我在python shell中

 Python 2.7.2 (default, Dec 19 2012, 16:09:14)  [GCC 4.4.6] on linux2
Type "help", "copyright", "credits" or "license" for more information.
 >>> import amuse
 >>>

所以如果我想在这里输出任何代码,我该如何处理?

我的程序保存在Pictures/practicepython目录中,如何在python shell中调用特定的.py文件?

使用import命令,我收到此错误消息

Python 2.7.2 (default, Dec 19 2012, 16:09:14) 
[GCC 4.4.6] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import amuse
>>> import first
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named first
>>> 

1 个答案:

答案 0 :(得分:2)

如果Python模块设计得当,它会有几行,通常靠近模块的末尾:

if __name__ == '__main__':
    main()  # or some other code here

假设first.py看起来像这样,你可以调用main()函数:

>>> import first
>>> first.main()

请注意,main()可能会引发SystemExit,这会导致REPL退出。如果这对您很重要,您可以使用try块来捕获它:

>>> import first
>>> try:
...     first.main()
... except SystemExit:
...     pass

不幸的是,某些模块没有正确的main()函数(或任何类似的函数),只需将所有顶级代码放在if中。在这种情况下,没有简单的方法从REPL运行模块,没有复制代码。

如果Python模块设计不正确,它会在导入后立即运行。这通常被认为是一件坏事,因为它使其他人更难以编程方式使用模块(例如调用模块的函数,实例化其类等)。