2010-06-17 92 views
0

我有一個文件a.txt與我想要運行的命令,行說:跑「源」蟒蛇

echo 1 
echo 2 
echo 3 

如果我是在CSH(UNIX),我會做source a.txt,它會運行。 從蟒蛇我想運行os.execl它,但我得到:

>>> os.execl("source", "a.txt") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.5/os.py", line 322, in execl 
    execv(file, args) 
OSError: [Errno 2] No such file or directory 

怎麼辦呢?

回答

1

您沒有提供source的完整路徑,並且os.execl需要路徑。

如果要使用env變量PATH,則應使用os.execlp。請參閱os module documentation

雖然,作爲@Walter提到,你可能想/bin/bash,而不是source

os.execl("/bin/bash", "a.txt") 
1

你只是想運行一個腳本?在這種情況下,你可以用「bash」替換「source」,並可能得到你想要的。

如果你想要在Python過程中產生副作用,比如設置環境變量或其他東西,那麼你很可能不太合適。

+0

我建議你在最後一句中刪除單詞「probably」。 – 2010-06-17 17:00:40

+0

好吧,從技術上講,你可以嘗試解析腳本,確定它會做什麼,然後將這些更改應用到Python的os.env等等。這可能是一個糟糕的主意,但這是可能的;因此「可能」。 – 2010-06-17 20:00:29

2

source不是一個可執行程序,所以你不能直接執行它。相反,它是shell中的內置命令。如果您真的需要訪問它,您需要啓動該shell。但是如果你只是想運行腳本,你根本不需要使用源代碼 - 只需讓shell直接執行你的腳本:

os.execl("/bin/bash", "a.txt")