我使用一块名为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
>>>
答案 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模块设计不正确,它会在导入后立即运行。这通常被认为是一件坏事,因为它使其他人更难以编程方式使用模块(例如调用模块的函数,实例化其类等)。