我正在尝试调试的第三方Python 2.5脚本让我陷入困境。脚本的相关部分是:
proc = subprocess.Popen(
"ls && source houdini_setup",
shell = True,
executable = "/bin/bash",
)
有一个监听端口5001并运行上述脚本的守护进程。当脚本运行时,它会失败,并显示以下错误:
_cygwin.py
houdini_setup
... (more files) ...
/bin/sh: line 0: source: houdini_setup: file not found
非常存在文件houdini_setup,如ls所示,实际上如果我在上面的脚本中将“source”更改为“cat”,脚本会按预期打印houdini_setup的内容。此外,在一个真正的bash shell中运行上面的命令也可以在没有投诉的情况下获取文件。
有谁知道这里发生了什么?
答案 0 :(得分:7)
source
会使用$PATH
来查找传递给它的内容。试试source ./houdini_setup
。
答案 1 :(得分:2)
您可以使用strace
来帮助诊断此类问题。在这种情况下,使用-ff
标志运行它以跟随子进程会显示您的代码在错误的位置寻找“houdini_setup”:
stat64("/usr/local/bin/houdini_setup", 0xbf989e60) = -1 ENOENT (No such file or directory)
stat64("/usr/bin/houdini_setup", 0xbf989e60) = -1 ENOENT (No such file or directory)
stat64("/bin/houdini_setup", 0xbf989e60) = -1 ENOENT (No such file or directory)
这可能会让您查看source
内置文件的文档。
答案 2 :(得分:0)
如果您的系统上有可用的bash,可以使用bash本身来完成这项任务:
os.popen("/bin/bash -l -c 'source $HOME/.yourfiletobesourced'")