我有一个文件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
怎么做?
答案 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
。
尽管如@Walter所提到的那样,您可能需要/bin/bash
而不是source
:
os.execl("/bin/bash", "a.txt")