在Laravel中运行python脚本,脚本运行但不完全执行?

时间:2017-07-01 22:58:28

标签: php python laravel python-3.x shell

在我的机器上运行本地Apache设置,我在Laravel之外使用python。

使用Laravel 5.4,我已经制作并注册了该命令。我可以使用php artisan python:printIt调用它。

我在运行命令方面取得了成功。 。 。但文件没有写!这是控制台消息:

  

$ php artisan python:printIt在printIt的命令句柄中。运行   命令。命令是:C:\ Users \ Cortland \ Miniconda3 \ python.exe   C:^ \ wamp64 ^ \ WWW ^ \ cmrd ^ \ cgi-bin目录^ \ PY-测试^ \ printer.pySuccess。这是   返回值:此消息来自python脚本.1

当通过python shell或命令行运行时,python脚本很好。在这里,必须运行脚本,因为它具有正确的print消息。但是,exec返回值为1,这是失败的。

确认失败,因为没有文件'pyfyle.txt'存在。

我做错了什么,怎么修好? 真正的应用程序将更多涉及,但必须确保我可以首先操作基本脚本调用。

Laravel命令类:

printIt.php

class printIt extends Command
{
    protected $signature = 'python:printIt';

    protected $description = 'Run the test python command.';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        echo "In command handle for printIt.\n";
        exec("where python", $path);

        $cmd = base_path('cgi-bin\py-test\printer.py');

        // "path/to/python command"
        $run = $path[0] . ' ' . escapeshellcmd($cmd);

        try {
            echo "Running command.\n";
            echo "Command is : " . $run;
            $res = exec($run, $out, $res);

            if ($res == 1) {
                throw \Exception("Could not run the sript");
            } else {
                echo "Success. Here is the return value: ", print_r($res);
            }
        } catch (\Exception $e) {
            echo "Error running command. It says " . $e->getMessage();
        }
    }
}

python脚本:

printer.py

with open('pyfyle.txt', 'w', encoding='utf-8') as f:
    f.write('new text here.')
    f.close

// Edit: error, incorrect call to close: change f.close to f.close()

print("This message came from the python script..")

2 个答案:

答案 0 :(得分:1)

在控制台中输入:

sudo chmod +x printer.py

授予Python脚本执行权限。

这适用于Linux发行版,但看到你有" C:\"在您的输出中,这意味着您正在运行Windows。

在哪种情况下:

  

您需要将.py添加到PATHEXT环境变量中。

根据:https://docs.python.org/3/faq/windows.html#how-do-i-make-python-scripts-executable

答案 1 :(得分:0)

问题是我对服务器运行的python版本做了一个假设。

在家里我使用Python 3.6。如果我刚开始在服务器上运行python -V,我就会避免数小时的混乱和挫折。

服务器在Python 2.6上运行,其中文件操作不同。 kwarg encoding无效,这足以打破程序。

另外,我应该打印$res以查看错误消息。

故事的道德:

始终检查软件和软件包版本。

始终找到显示错误的方法。