2010-02-24 6 views
10

मेरी अजगर कार्यक्रम में, जब मैं webbrowser मॉड्यूल के उपयोग के द्वारा एक जीमेल खाता बनाने के लिए भेज देते, अजगर प्रदर्शित करता है:मैं अजगर में वेबब्रोसर संदेश को कैसे अक्षम कर सकता हूं?

": निर्मित नई विंडो मौजूदा ब्राउज़र सत्र में अपने Gmail उपयोगकर्ता नाम दर्ज करें।"

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

इस के लिए कोड है:

webbrowser.open('https://www.google.com/accounts/NewAccount?service=mail') 
gmail_user = raw_input('Please enter your Gmail username: ') 

संपादित करें: बाहर की कोशिश कर रहा एलेक्स मार्टेली के सुझावों के दोनों के बाद, कोड है: http://pastebin.com/3uu9QS4A

संपादित करें 2: मैं सिर्फ यह बताने के लिए फैसला किया है उपयोगकर्ताओं को वास्तव में उन्हें भेजने के बजाय जीमेल पंजीकरण पृष्ठ पर जाने के लिए, क्योंकि यह करना बहुत आसान है और परिणामस्वरूप (वर्तमान में अनावश्यक-द्वारा-मुझे) त्रुटियां हैं।

+1

जब आप इन दो बयानों के आदेश को स्विच करते हैं तो क्या होता है? –

+0

मैं उन्हें स्विच नहीं कर सकता, क्योंकि इससे मेरे कोड में और समस्याएं आ सकती हैं। यदि आप कोड http://pastebin.com/GcHL2iYj पर एक नज़र डाल सकते हैं तो शायद आप और अधिक मदद कर सकते हैं? धन्यवाद। – ErikT

+1

यहां ठीक काम करता है (मैकोज़क्स 10.5)। आप किस प्लेटफॉर्म पर हैं? यह यूनिक्स और विंडोज के सभी रूपों पर काम करना है। बाद में आपके कोड में अन्य बग भी हैं (दो 'रिटर्न एक दूसरे के बाद कभी भी काम नहीं करेगा - पहला वाला निष्पादित होता है, इसलिए दूसरा वाला कभी नहीं पहुंचा) लेकिन वे आपके प्रश्न के लिए जर्मनी नहीं हैं। –

उत्तर

12

जैसा कि एसएलॉट एक टिप्पणी में संकेत देता है, आपको शायद raw_input पहले करना चाहिए; हालांकि, यह प्रति, webbrowser से संदेश को दबाने नहीं देता है, जैसा कि आप पूछते हैं - यह सिर्फ इसे स्थगित करता है।

वास्तव में संदेश दबाएं संदेश, आप अस्थायी रूप से मानक-आउटपुट या मानक-त्रुटि को रीडायरेक्ट कर सकते हैं - जो भी आपके चुने हुए ब्राउज़र में से प्रत्येक संदेश को उत्सर्जित करने के लिए उपयोग करता है। शायद उन्हें पायथन स्तर पर रीडायरेक्ट करने के लिए कोई उपयोग नहीं है (sys.stdout या sys.stderr के माध्यम से), क्योंकि आपका ब्राउज़र सीधे इसका आउटपुट करने जा रहा है; बल्कि, आप इसे ऑपरेटिंग-सिस्टम स्तर पर कर सकते हैं, उदाहरण के लिए, मानक उत्पादन के लिए:

import os 
gmail_user = raw_input('Please enter your Gmail username: ') 
savout = os.dup(1) 
os.close(1) 
os.open(os.devnull, os.O_RDWR) 
try: 
    webbrowser.open(whatever) 
finally: 
    os.dup2(savout, 1) 

(मानक त्रुटि के बजाय मानक उत्पादन के लिए, 2 के बजाय 1 का उपयोग करें)। यह बहुत कम स्तर का प्रोग्रामिंग है, लेकिन चूंकि वेबब्रोसर मॉड्यूल आपको "हुक" नहीं देता है जिस तरह से ब्राउज़र खोला जाता है, यह उस संदेश के दमन को सुनिश्चित करने के लिए एकमात्र विकल्प (अधिक या कम) है।

+0

धन्यवाद। यह पूरी तरह से काम करता है, इसके अलावा जीमेल उपयोगकर्ता नाम के लिए पूछने वाला हिस्सा कभी प्रदर्शित नहीं होता है। शायद अगर आपने कोड http://pastebin.com/GcHL2iYj पर एक नज़र डाली है तो आपको जवाब पता चलेगा? धन्यवाद – ErikT

+0

@ErikT, उस कोड में 'अंत में' खंड (जैसा कि मैंने अपने उत्तर में दिखाया है) में 'os.dup2 (savout, 1) 'नहीं है, ताकि मानक आउटपुट कभी भी बहाल न हो - इसे' ब्रेक 'लाइन जो अब 18 है। –

+0

इसे जोड़ने के बाद, प्रोग्राम अब कोड के अगले ब्लॉक (जीमेल उपयोगकर्ता नाम इनपुट) पर जाने के बजाए उस कथन पर समाप्त होता है। – ErikT

2

एक answer to another question है जो यहां प्रासंगिक है।

आप उपयोग कर सकते हैं

webbrowser.get().open('https://www.google.com/accounts/NewAccount?service=mail') 

मैं जब webbrowser.open() का उपयोग कर मेरे लिए एक संदेश स्टार्ट/usr/lib/फ़ायरफ़ॉक्स/फ़ायरफ़ॉक्स को जो नेतृत्व किया, XDG खुले स्थापित (लिनक्स) की है। इस संदेश के ऊपर की विधि का उपयोग नहीं किया गया है (और xdg-open अभी भी उपयोग किया जाता है)।

यह स्टडआउट आउटपुट को दबाता है। हालांकि यह सभी सेटअप के लिए stderr आउटपुट को दबा नहीं देता है। मुझे अभी भी टर्मिनल में त्रुटि संदेश हैं।

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