2010-04-27 9 views
6

मैं एक सर्वर अनुप्रयोग विकसित कर रहा हूं और मुझे हाल ही में एक परीक्षण सर्वर (डेबियन निचोड़) पर इस भयंकर त्रुटि का सामना करना पड़ा।पॉपन "sh: <command>" के साथ विफल रहता है: नहीं मिला "

हर निष्पादन मैं popen के पास एक संदेश के साथ विफल:

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

यह परवाह किए बिना होता है कि मुझे संपूर्ण पथ "प्रकार" या इसे छोटा बनाएं द्वारा लौटाए को इंगित। जैसा कि पहले उल्लेख किया गया है, यह केवल एक परीक्षण वातावरण में होता है, भ्रम जोड़ने के लिए, एक ही ओएस चला रहा है और इसमें कोई समस्या नहीं है।

popen जाहिरा तौर पर उपयोग कर रहा है आदेश पर अमल करने के लिए, लेकिन अगर मैं कमांड लाइन के माध्यम से एक ही आदेश (बैश या श), सब कुछ ठीक

पहले से

(पी एस

धन्यवाद चलाएँ: यहां तक ​​कि ! अजगर सिर्फ इस सिर scratcher कील की कोशिश की os.popen के लिए, और यह काम करता है)

संपादित यह एक सरल कॉल के विफल रहा है कि:

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

रिटर्न:

sh: tail: not found 
+0

कृपया वास्तविक कॉल पोस्ट करें, और यदि किसी भी चर का उपयोग करता है तो दिखाता है कि वे कैसे उत्पन्न होते हैं। –

+0

परिणाम यह बाइनरी के पूर्ण पथ का उपयोग कर समान है? (मेरा मतलब है: जहां पूंछ) – Cesar

+0

हाँ, जब तक यह पॉपन के माध्यम से चलता है, sh उस त्रुटि संदेश देता है .. – smallmeans

उत्तर

1

शायद अपने पथ ठीक से विन्यस्त नहीं है, जब popen बुला। मुझे लगता है कि यह एक PHP कॉन्फ़िगरेशन समस्या है, लेकिन आप इसे बायपास कर सकते हैं:

  1. पूंछ कार्यक्रम के लिए पूर्ण पथ निर्धारित करने के लिए which tail चलाएं।
  2. पथ के साथ कॉल popen में 1.
+0

यह पहली बात है जिसकी मैंने कोशिश की थी। "टाइप" कमांड डेबियन पर "कौन सा" जैसा है और पूरा पथ देता है .. लेकिन इसका कोई फायदा नहीं हुआ .. पॉपन अभी भी "नहीं मिला" पर बनी हुई है, जो इस बिंदु पर काफी परेशान है .. – smallmeans

0

पाया, जबकि ठीक उसी उत्पादन के बारे में अपने खुद के जवाब के लिए खोज मैं इस सवाल पाया। हालांकि मैं सी में कोडिंग कर रहा हूं, मैं अभी भी पॉपन() का उपयोग कर रहा हूं। मैं सी में एक नौसिखिया हूं, और पाया कि मैंने निम्नलिखित गलती की है।

मैं उम्मीद में इसका उत्तर दे रहा हूं कि यह एक ही त्रुटि संदेश की खोज करने वाले अन्य लोगों के लिए उपयोगी हो सकता है। इस तरह मैंने समस्या का सामना किया, खोजा और सही किया।

मैंने अपनी कमांड लाइन बनाने के लिए एक स्ट्रिंग और समेकित अन्य तारों की घोषणा की।

मैंने यह सत्यापित करने के लिए लाइन को मुद्रित किया कि यह वांछित आदेश था। जब stdout से निष्पादित और निष्पादित, लाइन काम किया। तो शैल क्यों चले गए()?

मैंने आउटपुट को एक फ़ाइल में पाइप किया और फ़ाइल को एक संपादक में खोला, और देखा कि जब मेरी खाली स्ट्रिंग शुरू की गई थी, तो विशेष चरित्र 'ए' स्ट्रिंग के साथ बनाया गया था, जो टर्मिनल पर प्रदर्शित नहीं हुआ था।

मैं जिस तरह से मैं इस से चार सरणी घोषित बदल दिया है:

चार VARNAME [];

इस के लिए

:

चार VARNAME [512] = { ""};

इसने इस मुद्दे को हल किया। मैं popen() के साथ उपयोग की जाने वाली स्ट्रिंग में छिपे हुए वर्णों को देखने के लिए किसी भी समस्या के साथ किसी को भी प्रोत्साहित करता हूं।

संबंधित मुद्दे