【问题标题】:"no such file or directory" in python script calling other python script in debian linuxpython脚本中的“没有这样的文件或目录”在debian linux中调用其他python脚本
【发布时间】:2015-12-29 18:54:15
【问题描述】:

您好,我在 linux debian 的 /home/user/a/ 目录中的 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'”的东西,但我不知道如何/在哪里成功地合并该语句。

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

【问题讨论】:

  • 先把python的工作目录改成/home/user/b?或者将 php 的 include 调用改为 include('/absolute/path/to/something.php')。
  • 谢谢,第一个很明显,我现在正在谷歌搜索如何做到这一点,如果第一个不成功,我会尝试合并第二个选项。跨度>

标签: php python subprocess call


【解决方案1】:

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

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

.谢谢马克 B & 我喜欢 Sebastian 的动态方法,谢谢 :)

【讨论】:

    【解决方案2】:

    如果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)
    

    get_script_dir().

    【讨论】:

      【解决方案3】:

      你可以试试这个程序:

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

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

      【讨论】:

      • 感谢您的建议纳吉布!它正在工作:)
      猜你喜欢
      • 2013-11-14
      • 2019-08-23
      • 2016-01-11
      • 2017-06-16
      • 2018-08-24
      • 1970-01-01
      • 2020-05-09
      相关资源
      最近更新 更多