簡體   English   中英

popen失敗了“sh: <command> : 未找到”

[英]popen fails with “sh: <command>: not found”

我正在開發一個服務器應用程序,我最近在測試服務器(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

在調用popen時,可能沒有正確配置PATH。 我想這是一個PHP配置問題,但您可以通過以下方式繞過它:

  1. 運行which tail以確定尾程序的完整路徑。
  2. 使用1中找到的路徑調用popen

我在搜索關於完全相同輸出的我自己的答案時發現了這個問題。 雖然我在C編碼,但我仍在使用popen()。 我是C的初學者,發現我犯了以下錯誤。

我正在回答這個問題,希望對搜索相同錯誤消息的其他人有用。 這就是我遇到,發現和糾正問題的方法。

我聲明了一個字符串,並用它連接其他字符串來制定我的命令行。

我將這行打印到stdout以驗證它是我想要的命令。 從stdout復制並執行時,該行有效。 那么為什么來自popen()的shell窒息?

我將輸出傳送到文件並在編輯器中打開文件,並看到當我的空字符串被初始化時,使用字符串創建了特殊字符“^ A”,該字符串未顯示在終端上。

我改變了我從這里聲明char數組的方式:

char varname [];

對此:

char varname [512] = {“”};

這解決了這個問題。 我鼓勵有類似問題的人在popen()使用的字符串中查找隱藏的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM