के बीच असंगत व्यवहार है I समस्या/मानक के टर्मिनल से अलग प्रोप्रोसेस के पॉपन() के परिणामों की व्याख्या करने वाली समस्या ग्रहण/पायचर्म के साथ है। सभी ओएसएक्स पर पायथन 2.6.1 का उपयोग कर रहे हैं।subprocess.Popen() में ग्रहण/पायचर्म और टर्मिनल निष्पादन
import subprocess
args = ["/usr/bin/which", "git"]
print "Will execute %s" % " ".join(args)
try:
p = subprocess.Popen(["/usr/bin/which", "git"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# tuple of StdOut, StdErr is the responses, so ..
ret = p.communicate()
if ret[0] == '' and ret[1] <> '':
msg = "cmd %s failed: %s" % (fullcmd, ret[1])
if fail_on_error:
raise NameError(msg)
except OSError, e:
print >>sys.stderr, "Execution failed:", e
एक मानक टर्मिनल के साथ
, लाइन:
यहाँ एक सरल उदाहरण स्क्रिप्ट है
(Pdb) print ret
('/usr/local/bin/git\n', '')
ग्रहण और PyCharm मुझे एक खाली टपल दे:
ret = p.communicate()
मुझे देता है :
ret = {tuple} ('','')
खोल = मूल्य बदलना समस्या को हल नहीं करता है। टर्मिनल पर, खोल = सही सेट करना, और पूरी तरह से कमांड को पास करना (यानी, args = ["/ usr/bin/which git"]) मुझे एक ही परिणाम देता है: ret = ('/ usr/local/bin/git \ n ',' ')। और ग्रहण/PyCharm दोनों मुझे एक खाली tuple दे।
कोई विचार क्या मैं गलत कर सकता हूं?
वाह, मुझे विंडोज के तहत एक ही समस्या थी और आपने मुझे सही दिशा में इंगित किया! धन्यवाद। कंसोल से लॉन्च किए गए एक दुभाषिया के पास "सिस्टम" और "वर्तमान उपयोगकर्ता" $ PATH चर दोनों तक पहुंच है, जबकि आईडीई या एक्सप्लोरर से लॉन्च किए गए एक दुभाषिया या प्रोग्राम के पास केवल "सिस्टम" $ PATH तक पहुंच है। –
एक्लिप्स को टर्मिनल से उपलब्ध सभी संदर्भों को शामिल करने का समाधान क्या है? धन्यवाद! – Tarelli