Intereting Posts
jQuery.ajax () v1.5 возвращает «parsererror» для json-данных отправить переменную javaScript в переменную php Вытащить 5 случайных записей из базы данных mysql Расширяет модель в CodeIgniter Как удалить повторяющиеся значения из массива в PHP Предупреждение PHP: array_shift () ожидает, что параметр 1 будет массивом, null указан в /home5/…/php/symfony/command/sfCommandManager.class.php Как включить генерируемые страницы CodeIgniter? Как использовать версию PHP для MAMP вместо значения по умолчанию для OSX Не удалось создать диаграмму Google с использованием данных таблицы MySQL в качестве источника данных Какой из них быстрее и легче – mysqli & PDO Запустить php-скрипт из командной строки с переменной как остановить данные, автоматически вставляемые в базу данных в php Я не могу начать работу с приложением Zend Framework 2 скелета Как определить последний идентификатор вставки в транзакции в Yii с помощью DAO? не может видеть страницы с KnpPaginatorBundle

popen не выполняется с помощью команды "sh: <command>: not found"

Я разрабатываю серверное приложение, и недавно я столкнулся с этой wierd-ошибкой на тестовом сервере (Debian Squeeze).

Каждый исполняемый файл, который я передаю в popen, терпит неудачу с помощью msg:

sh: sort: not found // happens to any command 

Это происходит независимо от того, укажу ли я на полный путь, возвращаемый «типом», или держите его коротким. Как упоминалось ранее, это происходит только в одной тестовой среде, чтобы добавить путаницу, я запускаю одну и ту же ОС и не имел никаких проблем.

По-видимому, Popen использует sh для выполнения команд, но если я запускаю ту же команду через командную строку (bash или sh), все в порядке

заранее спасибо

(PS: даже попробовал Python os.popen только для того, чтобы прибить этот головной скребок, и он работает!)

Изменить это простой вызов, который не выполняется:

 $command="tail -10 myfile"; $handle = popen($command.' 2>&1','r'); if($handle){ while (!feof($handle)){ ....//process buffer } } 

возвращает:

 sh: tail: not found 

Вероятно, ваш PATH НЕ настроен должным образом, при вызове popen. Я думаю, что это проблема конфигурации PHP, но вы можете обойти ее:

  1. Запустите which tail чтобы определить полный путь к хвостовой программе.
  2. Вызовите popen с помощью пути, найденного в 1.

Я нашел этот вопрос, ища свой собственный ответ относительно того же самого вывода. Хотя я кодирую в C, я все еще использую popen (). Я новичок в C и обнаружил, что сделал следующую ошибку.

Я отвечаю на это в надежде, что это может быть полезно для других, которые ищут одно и то же сообщение об ошибке. Вот как я столкнулся, обнаружил и исправил проблему.

Я объявил строку и конкатенировал другие строки, чтобы сформулировать мою командную строку.

Я напечатал строку в stdout, чтобы убедиться, что это была команда, которую я хотел. При копировании из stdout и выполнении линии работала. Так почему же оболочка забилась из popen ()?

Я передал вывод в файл и открыл файл в редакторе, и увидел, что когда моя пустая строка была инициализирована, специальный символ «^ A» был создан со строкой, которая не отображалась на терминале.

Я изменил способ, которым я объявлял массив char из этого:

char varname [];

к этому:

char varname [512] = {""};

Это решило проблему. Я призываю всех, у кого есть аналогичная проблема, искать скрытые символы в строке, используемой с popen ().