Я разрабатываю серверное приложение, и недавно я столкнулся с этой 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, но вы можете обойти ее:
which tail
чтобы определить полный путь к хвостовой программе. popen
с помощью пути, найденного в 1. Я нашел этот вопрос, ища свой собственный ответ относительно того же самого вывода. Хотя я кодирую в C, я все еще использую popen (). Я новичок в C и обнаружил, что сделал следующую ошибку.
Я отвечаю на это в надежде, что это может быть полезно для других, которые ищут одно и то же сообщение об ошибке. Вот как я столкнулся, обнаружил и исправил проблему.
Я объявил строку и конкатенировал другие строки, чтобы сформулировать мою командную строку.
Я напечатал строку в stdout, чтобы убедиться, что это была команда, которую я хотел. При копировании из stdout и выполнении линии работала. Так почему же оболочка забилась из popen ()?
Я передал вывод в файл и открыл файл в редакторе, и увидел, что когда моя пустая строка была инициализирована, специальный символ «^ A» был создан со строкой, которая не отображалась на терминале.
Я изменил способ, которым я объявлял массив char из этого:
char varname [];
к этому:
char varname [512] = {""};
Это решило проблему. Я призываю всех, у кого есть аналогичная проблема, искать скрытые символы в строке, используемой с popen ().