मेरा टाइमर ठीक से काम नहीं करेगा, क्योंकि यह हमेशा के लिए प्रिंट करता रहता है, न कि मैं जो चाहता हूं।

मैंने पहले ही कई तरह से स्क्रिप्ट को फिर से व्यवस्थित करने की कोशिश की है, लेकिन परिणाम हमेशा एक जैसा होता है।

import time
CommandInput = input()
#execution [uptime]
def uptime(y):
    while 1 == 1:
        if (CommandInput == "uptime"):
            print(y, " seconds")
        y = y + 1
        time.sleep(1)


uptime(9)

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

1
Duhon 12 जुलाई 2019, 02:42

2 जवाब

सबसे बढ़िया उत्तर

आपके वर्तमान प्रोग्राम को इनपुट () के समाप्त होने की प्रतीक्षा करनी होगी। जब तक उपयोगकर्ता प्रवेश नहीं करता तब तक संकलक दूसरी पंक्ति से आगे नहीं बढ़ता है। इस प्रकार इनपुट समाप्त होने के बाद कार्य शुरू होता है।

यह टाइमर कई तरह से किया जा सकता है, जैसे थ्रेडिंग या टाइमर। इसके कुछ उदाहरण हैं यहां और यहां। थ्रेडिंग के लिए, आपको उपयोगकर्ता इनपुट के लिए एक प्रक्रिया और टाइमर के लिए एक की आवश्यकता होती है। लेकिन बेहतर और आसान तरीका है कि आप टाइमर का उपयोग करें और वर्तमान समय को स्टोर करें। मेरा मानना ​​​​है कि निम्नलिखित कोड कुछ हद तक वही है जो आप चाहते हैं:

import time

start_time = time.time()

def get_time():
    current_time = time.time()
    total = current_time - start_time
    return total

while True:
    CommandInput = input()
    if CommandInput == "uptime":
        y = get_time()
        print(str(round(y)) + " seconds")

चर start_time प्रारंभ में वर्तमान समय को रिकॉर्ड करता है। time.time() कंप्यूटर पर सेकंड में वर्तमान समय प्राप्त करता है। get_time फ़ंक्शन को इनपुट के बाद कॉल किया जाता है और देखता है कि वर्तमान समय घटाकर प्रारंभ समय घटाकर कितना समय चिपकाया गया है। इस तरह आपको एकाधिक लूप की आवश्यकता नहीं है।

जबकि ट्रू लूप केवल उपयोगकर्ता इनपुट की प्रतीक्षा करता है और फिर समय प्रिंट करता है। यह तब तक दोहराता है जब तक कि कार्यक्रम समाप्त नहीं हो जाता।

1
Jo Bay 23 जुलाई 2019, 11:46

इस तरह की स्क्रिप्ट लिखने के लिए आपको asyncio (https:/ नामक मॉड्यूल पर गौर करना होगा। /docs.python.org/3/library/asyncio.html), जो आपको एक ही समय में कई चीजें चलाने की अनुमति देगा।

यहाँ एक asyncio हैलो वर्ल्ड है:

import asyncio

async def main():
    print('Hello ...')
    await asyncio.sleep(1)
    print('... World!')

# Python 3.7+
asyncio.run(main())
0
JonPizza 11 जुलाई 2019, 23:50