2014-11-22 32 views
1

執行Python代碼(含模塊)我有一個非常具體的問題。我想在執行的python腳本(從python字符串)中調用一個Python函數,該腳本一開始就包含導入。從字符串

聽起來很複雜,但事實並非如此。我想要做的是這樣的:

x = """import os 
def test(): 
    print(os.curdir) 
""" 
exec(x) 
test() 

這工作在終端(IPython中與CPython的),但它並沒有一個實際的Python腳本里面工作。它不會工作,因爲它說OS不是進口,所以我想這是因爲OS被導入到被丟棄的範圍,當我把它從腳本它沒有操作系統進口。

我有其他的方式,我可以去解決這個惱人的問題,但它們都包括寫入(在我的腳本這是不可接受的)文件到硬盤。

UPDATE

對不起,顯然,如果你調用exec和測試從功能這個問題只發生

例如:

x = """import os 
def test(): 
     print(os.curdir) 
     """ 

def mytest(): 
    exec(x) 
    test() 
mytest() 

另外一個工作很顯然,這是毫無意義一切爲了我。

+0

我有關於Python 2.7.6和Python 3.2.3運行此代碼沒有問題。 – syntagma 2014-11-22 17:29:57

+0

我更新了問題,謝謝。 – Smarties89 2014-11-22 18:37:34

回答

0

我不認爲這是你的代碼任何問題。我已經嘗試過了兩個的Python 2.7.6和Python 3.2.3,Linux和Mac OS X的

此外,以下行之有效:

#!/usr/bin/python 

x = """import os 
def test(): 
    print(os.curdir) 
""" 
exec(x) 
test() 
print (os.curdir) 
0

什麼Python版本您使用的? 我不知道我應該不行。 Exec在相同的全局範圍內執行它。 所以,如果測試是無濟於事,操作系統應該是無濟於事爲好;)

+0

我使用GCC 4.8.2編譯的Python 2.7.6(默認,2014年3月22日,22:59:56)。 (14.04 LTS中的標準Ubuntu服務器Python) – Smarties89 2014-11-22 18:37:13