0

我有一个文件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

怎么做?

4

3 回答 3

2

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

os.execl("/bin/bash", "a.txt")
于 2010-06-17T16:48:39.987 回答
1

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

如果您希望获取的东西对 Python 进程产生副作用,例如设置环境变量或其他东西,那么您可能不走运。

于 2010-06-17T16:39:24.247 回答
1

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

如果你想使用PATHenv 变量,你应该使用os.execlp.

请参阅os 模块文档

虽然,正如@Walter 提到的,你可能想要/bin/bash而不是source

os.execl("/bin/bash", "a.txt")
于 2010-06-17T16:46:01.007 回答