从python运行“source”

时间:2010-06-17 16:36:22

标签: python csh os.execl

我有一个文件a.txt,其中包含我要运行的命令行,例如:

echo 1
echo 2
echo 3

如果我在csh(unix)上,我会完成source a.txt并且它会运行。 从python我想用它运行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

怎么做?

3 个答案:

答案 0 :(得分:2)

source不是可执行程序,因此您无法直接执行它。相反,它是shell中的内置命令。如果您确实需要访问它,则需要启动该shell。但是如果您只想运行脚本,则根本不需要使用源代码 - 只需让shell直接执行您的脚本:

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

答案 1 :(得分:1)

你只是想运行一个脚本吗?在这种情况下,您可以将“source”替换为“bash”,并可能获得您想要的内容。

如果你想让这些东西对Python进程产生副作用,比如设置环境变量或其他东西,你可能会运气不好。

答案 2 :(得分:1)

您没有提供source的完整路径,而os.execl需要路径。

如果您想使用PATH env变量,则应使用os.execlp

请参阅os module documentation

尽管如@Walter所提到的那样,您可能需要/bin/bash而不是source

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