";没有这样的文件或目录“;在python脚本中调用debianlinux中的其他python脚本


"no such file or directory" in python script calling other python script in debian linux

嗨,我在目录/home/user/a/中的linux debian中用python脚本pythonscript1.py编写了以下内容:

import subprocess
subprocess.call(["python" /home/user/b/phpcall.py"])

其中phpcall.py脚本包含:

import subprocess
subprocess.call(["php", "/home/user/b/phpscript1.php"])

从控制台单独调用所有脚本都能完美地运行,但当我使用第一个脚本,而第二个脚本调用/查找目录b中的文件,而不是a时,会产生以下错误:

"PHP warning: include_once(something.php): failed to open stream: no such file in /home/user/b/phpschript1.php on line 25

现在我很清楚,问题是它无法访问它的原始目录。但我不知道应该在第一个脚本中添加什么命令,以允许第二个脚本在文件夹b中查看。

到目前为止,谷歌搜索结果显示"include_path='include'",但我不知道如何/在哪里成功地合并该语句。

任何关于正确语法的建议都将不胜感激!

您可以尝试这个程序:

import subprocess
import sys
proc = subprocess.Popen(
       [sys.executable, '/home/user/b/phpcall.py'],stdin=subprocess.PIPE)
proc.communicate()

我认为这是工作。如果不告知。

如果php脚本仅在使用python脚本从目录启动时才起作用,则可以使用cwd参数更改子流程的工作目录:

#!/usr/bin/env python
from subprocess import check_call
check_call(["php", "/home/user/b/phpscript1.php"], cwd="/home/user/b")

我添加了shebang #!/usr/bin/env python,这样您就可以直接作为/path/to/phpcall.py运行脚本,假设它是可执行的(chmod +x phpcall.py(。

注意:如果您想以user用户的身份运行python脚本,那么您可以使用~:指定路径

#!/usr/bin/env python
import os
from subprocess import check_call
script_dir = os.path.expanduser("~/b")
check_call(["php", os.path.join(script_dir, "phpscript1.php")], cwd=script_dir)

为了避免对脚本目录进行硬编码,您可以动态地找到它:

#!/usr/bin/env python
import os
from subprocess import check_call
script_dir = get_script_dir()
check_call(["php", os.path.join(script_dir, "phpscript1.php")], cwd=script_dir)

其中CCD_ 8。

为了将来的参考,直接从python中调用php脚本的代码是:

import os
os.chdir("/home/user/b")
os.system("php /home/user/b/phpscript1.php")

.谢谢Marc B&我喜欢动态方法Sebastian,谢谢:(