我遇到了一个问题,PHP可以在Windows上正确执行CMD命令,但是当我创建要运行的自定义命令时,没有任何效果。
逻辑: 我想“ cd”进入目录,然后运行python脚本,该脚本将从网络上抓取数据并将其保存在csv中。 Python脚本工作正常。
PHP代码:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
$keyword = $_POST['singleSearchTerm'];
$filename = $_POST['singleFilename'];
$settings = file('settings.txt', FILE_SKIP_EMPTY_LINES);
$conda_path = $settings[0];
$working_env = $settings[1];
$script = "scrape.py";
$url = "https://www.pinterest.com/search/pins/?q=";
$current_dir = getcwd();
// cd into path
$cd_path = "cd " . $conda_path . "&& ";
// activate env
$activate_env = "activate " . $working_env . " && cd ";
// run python script
$pyCommand = $current_dir . "\\ps\\ " . " && python -W ignore ". $script . " --url " . $url . $keyword . " --fname " . $filename;
// full command
$full_command = $cd_path . $activate_env . $pyCommand;
echo $full_command;
// test - works fine
exec("start notepad.exe");
// doesn't do anything
exec($full_command);
// doesnt do anything
system($full_command)
}
生成的命令: 加载上述PHP后,将生成以下命令:
cd C:\Users\da74\Anaconda3\Scripts && activate scrape && cd C:\MAMP\htdocs\pinscraper\ps\ && python -W ignore scrape.py --url https://www.pinterest.com/search/pins/?q=old --fname dat.csv
问题: 将以上命令粘贴到CMD中后,它将运行。但是,当它在PHP中使用exec()或system()传递时,它不会运行。
已测试: 经过测试:
exec("start notepad.exe");
,它会打开一个记事本窗口。我不知道出什么问题了。是隐藏空间吗?还是其他?
感谢您的帮助。 谢谢
答案 0 :(得分:0)
我有使用NodeJS运行它的替代方法。
任何人都在寻找相同的问题,发现PHP在'&&'之后和之前留下了不寻常的空格,有时会无故断行。
为此,我安装了nodejs。然后使PHP逐行将每个var保存在设置文件中,并让nodejs形成一个使用'process'和exec运行的命令。它运行完美,只需要几行代码。