在Python中运行“source”

0 投票
3 回答
2833 浏览
提问于 2025-04-16 00:06

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

1

你只是想运行一个脚本吗?如果是这样的话,你可以把“source”换成“bash”,这样可能就能达到你想要的效果。

如果你希望被引入的东西对Python进程产生一些影响,比如设置环境变量之类的,那你可能就没那么幸运了。

2

source 不是一个可以直接运行的程序,所以你不能直接执行它。它其实是一个在命令行中内置的命令。如果你真的需要使用它,就得先打开那个命令行。不过,如果你只是想运行一个脚本,其实根本不需要用到 source,只要让命令行直接执行你的脚本就可以了:

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

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

如果你想使用PATH这个环境变量,你应该用os.execlp

可以查看一下os模块的文档

不过,正如@Walter提到的,你可能需要用/bin/bash来代替source

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

撰写回答