2012-03-04 52 views
0

在ipython中我需要一個接一個地運行兩個腳本。如果我在script1之後運行script2,則script1中的函數無法正常工作。例如,腳本1有行import os和定義功能myfunct,它使用os庫。在ipython中運行script2之後,在嘗試運行myfunct時遇到類似global name os in not defined的錯誤。我不明白問題在哪裏。任何暗示是讚賞。ipython:如何運行兩個腳本

+0

你有腳本2中的'import script1'行嗎? – 2012-03-04 23:33:41

+0

@ypercube是我有這條線 – ashim 2012-03-04 23:40:55

+0

你能舉一個簡單的例子來演示這個問題嗎? – 2012-03-05 00:36:40

回答

0

很簡單,如果myfunct需要使用os模塊,那麼myfunct應該有import os在裏面。您的腳本應該以這種方式自包含。不要依賴ipython中的全局導入將在執行「運行」命令之間的命名空間中存在。

運行兩個腳本,通常的方式做這將是把工作變成一個main()功能,並用它在第三腳本,如:

import script1 
import script2 
script1.main() 
script2.main() 

你可能現在有一些像這樣的:

# script1.py 
print 'hello world from script1' 

而在其他文件中:

# script2.py 
print 'hello world from script2' 

然後,從裸露的腳本,將其轉化成可以導入和使用的模塊,結構會更通常是這樣的:

# script1.py 

def main(): 
    print 'hello world from script1' 

if __name__ == '__main__': 
    main() 
中的其他文件

而且類似:

# script2.py 

def main(): 
    print 'hello world from script2' 

if __name__ == '__main__': 
    main() 

現在您可以編寫第三個文件,它使用script1和script2,如上面在我的原始文章中所示。

+0

你能否詳細說明你答案的第二部分。我應該在函數內部定義函數? – ashim 2012-03-04 23:44:09

+0

@capoluca這些是模塊名稱內的函數。也許你應該提供有關導致問題的代碼的更多細節。 – alexis 2012-03-04 23:51:21

+0

是的。增加了一些說明 – wim 2012-03-04 23:53:03