অ্যাপলস্ক্রিপ্ট "বিলম্ব" কমান্ড কাজ করছে না যেহেতু ইয়োসেমাইটে স্যুইচ হয়েছে


10

দ্রষ্টব্য:delay ওএস এক্স 10.11 এল ক্যাপিটেনে এই সমস্যাটি স্থির করা হয়েছিল।

আমি যখন থেকে ইয়োসেমাইটে আপগ্রেড করেছি তখন থেকেই বিলম্ব ব্যবহার করা অ্যাপ্লিক্রিপ্টগুলি কাজ করা বন্ধ করে দিয়েছে। আমি এটা কিভাবে ঠিক করবো?

একটি সহজ উদাহরণের জন্য এখানে বিশ্বের সবচেয়ে সহজ অ্যাপ্লিকেশন's

set volume output volume 0
delay 5
set volume output volume 20
delay 5
set volume output volume 0
delay 5
set volume output volume 20
delay 5
set volume output volume 0
delay 5
set volume output volume 20
delay 5
set volume output volume 0

এটি সম্পূর্ণ হতে 30 সেকেন্ড সময় নিতে হবে। যদি আমি এটি স্ক্রিপ্ট সম্পাদকে চালিত করি (পূর্বে অ্যাপসক্রিপ্ট সম্পাদক) এটি শেষ হতে 30 সেকেন্ড সময় নেয়। তবে আমি যদি এই স্ক্রিপ্টটিকে অ্যাপ হিসাবে সংরক্ষণ করি তবে আমি যখন অ্যাপ্লিকেশনটি চালু করি, তখন বিলম্বগুলি উপেক্ষা করা হয় এবং অ্যাপ্লিকেশনটি সম্পূর্ণ হতে দ্বিতীয় সেকেন্ডের একটি অংশ নেয়।

পরবর্তী পদক্ষেপে যাওয়ার আগে আমি কীভাবে অ্যাপলস্ক্রিপ্টকে নির্দিষ্ট সময়ের জন্য বিলম্ব করতে বাধ্য করতে পারি? এটি কি ইয়োসেমাইট বিড়ম্বনা? একটি নির্ভরযোগ্য workaround আছে?


এটি আমার ম্যাক (10.10.1) তে প্রত্যাশা অনুযায়ী কাজ করে
মার্খুંટ

কোন ধারণা কী কারণে এটি খনিতে কাজ না করে? স্পষ্ট করার জন্য: এটি স্ক্রিপ্ট সম্পাদকে কাজ করে, তবে আমি যদি স্ক্রিপ্টটিকে অ্যাপ হিসাবে সংরক্ষণ করি এবং তারপরে অ্যাপ্লিকেশনটি চালু করি, তবে বিলম্বগুলি উপেক্ষা করা হবে। এটি সবচেয়ে আশ্চর্যের বিষয়।
2oh1

10.10.3 এ আমার একই সমস্যা আছে
টমাস টেম্পেলম্যান

অ্যাপলকে রিপোর্ট করা হয়েছে: openradar.me/21588747
টমাস টেম্পেলম্যান

1
এই সমস্যাটি ওএস এক্স 10.11 এল ক্যাপিটনে স্থির করা হয়েছিল।
ক্রিস পৃষ্ঠা

উত্তর:


7

দ্রষ্টব্য:delay ওএস এক্স 10.11 এল ক্যাপিটেনে এই সমস্যাটি স্থির করা হয়েছিল।

@ 2oh1, আপনার উত্তরে সঠিক বুদ্ধিমান ধারণা রয়েছে তবে এখানে একটি সম্পূর্ণ এবং সঠিক উত্তর:

এটিকে ঘিরে কাজ করার একমাত্র যুক্তিযুক্ত উপায় হ'ল লুপের মধ্যে "বিলম্ব" প্রার্থনা করা যা চালিয়ে যাওয়ার আগে কাঙ্ক্ষিত সময়কালকে ব্যয় করে তা নিশ্চিত করে। এটি করার সর্বোত্তম উপায় হ'ল একটি কাস্টম হ্যান্ডলারের সাথে "বিলম্ব" ওভাররাইড করা:

on delay duration
  set endTime to (current date) + duration
  repeat while (current date) is less than endTime
    tell AppleScript to delay endTime - (current date)
  end repeat
end delay

এটি আপনাকে আপনার স্ক্রিপ্টের বাকী অংশটি অপরিবর্তিত রাখতে সক্ষম করে এবং আপনি সাধারণত "বিলম্ব" ব্যবহার করতে পারেন, যেমন,

delay 5
display alert "I like cake!"

[দ্রষ্টব্য: সাধারণত, কাস্টম হ্যান্ডলার অন্তর্নির্মিত "বিলম্ব" অনুরোধ করতে "অবিরত বিলম্ব সময়কাল" ব্যবহার করবে তবে আমি দেখতে পেয়েছি যে এটি স্ক্রিপ্ট সম্পাদকের মধ্যে কাজ করে, এটি অ্যাপলেটের মধ্যে ব্যবহার করার সময় এটি একটি ত্রুটি ফেরায় ("পারে" টি দেরি অবিরত করুন। (-1708) ")। আমি অ্যাপলস্ক্রিপ্টকে সেখানে পৌঁছানোর জন্য "চালিয়ে" ব্যবহার না করে বিলম্ব কমান্ডটি হ্যান্ডেল করার জন্য সরাসরি বিষয়টি জানিয়ে কাজ করেছি worked]

সমস্যাটি হ'ল delayস্ক্রিপ্টটি থামানোর সময় ব্যবহারকারীর ইনপুটটি প্রসেস করে, তাই আপনি এখনও অ্যাপলেট দ্বারা প্রদর্শিত মেনু বা উইন্ডোতে ক্লিক করতে পারেন এবং একটি বাগ রয়েছে (10.11-এ স্থির) যেখানে delayস্ক্রিপ্টের প্রয়োগ পুনরায় শুরু করার আগে ব্যবহারকারীর ইনপুট পুরো সময়কাল অপেক্ষা না করে causes । আপনি যদি অ্যাপলেটটির সাথে ইন্টারঅ্যাক্ট না delayকরেন তবে সঠিকভাবে কাজ করে।


এই সমস্ত কি কোনও বাগ, বা ইউসেমাইটের সাথে এইভাবে কাজ করার কোনও কারণ রয়েছে?
2oh1

এটি একটি বাগ যা দেরি করে না।
ক্রিস পৃষ্ঠা

এটা খুব অদ্ভুত। আমি এমন একটি অ্যাপলস্ক্রিপ্টের সাথে টিঙ্কিং করছিলাম যা অন্য রাতে বিলম্ব ব্যবহার করে, এবং হঠাৎ করে, বিলম্ব আবার সঠিকভাবে কাজ করে। আমি ধরে নিয়েছি বাগ ঠিক হয়ে গেছে। এক ঘন্টা পরে, কিছু না বদলেও বাগটি ফিরে এসেছিল। আমি সত্যিই হতবাক। যদিও তাতে কিছু আসে যায় না। সময় নির্ধারণ করতে আমি একটি পরিবর্তনশীল ব্যবহার করছি এবং পাঁচ মিনিট পরে (উদাহরণস্বরূপ) অবধি বিলম্ব করব এবং এটি পুরোপুরি কার্যকরভাবে কাজ করছে। সুতরাং ... সমস্যা সমাধান হয়েছে, তবে সমস্যাটি কেন বিদ্যমান তা ব্যাখ্যা করে না। আকর্ষণীয়, আকর্ষণীয়, আকর্ষণীয়।
2oh1

1
অ্যাপল বোকা কারণ। অ্যাপল সফ্টওয়্যারগুলি ওএস এক্সকে বাৎসরিকভাবে প্রকাশ করা শুরু করার পরে অনেক কম নির্ভরযোগ্য। আমি উচ্চতর ওএস এক্স এর ছোট সংস্করণগুলি মিস করি (10.6.8 এর মতো) যেখানে ওএসটি রক-শক্ত ছিল। আপনি কেবল এই ধরণের অভিজ্ঞতা আর পাবেন না।
উইলিয়াম টি ফ্রগগার্ড

যদি এটি কোনও বাগ হয় (যার সাথে আমি একমত) তবে কেন এখনও এটি স্থির হয়নি, আমি অবাক হই। এখানে কেউ কি রাডার রিপোর্ট তৈরি করেছে? আপনি কি দয়া করে এর আইডি পোস্ট করবেন? (অথবা / ওপেনাডার.এম-তেও পোস্ট করুন)
টমাস টেম্পেলম্যান

5

এই একই সমস্যার সাথে লড়াই করার সময় আমি একটি সম্পর্কিত নয় এমন প্রশ্নের উত্তর পেয়েছি এবং এটি চেষ্টা করার সিদ্ধান্ত নিয়েছি এবং এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে।

কেবল delay 5সঙ্গে প্রতিস্থাপন do shell script "/bin/sleep 5"এবং একই ফলাফল পেতে।


ভাগ করে নেওয়ার জন্য ধন্যবাদ! আমি আগে যেমন বলেছি, আমি এটি পরীক্ষা করতে পারছি না কারণ যে কারণে আমাকে বোঝা যায় না, 5 দেরি এখনই আমার পক্ষে যেমনটি করা উচিত ঠিক ততক্ষণে কাজ করছে (আমি কিছুক্ষণ আগে এটি আবার পরীক্ষা করেছি)। কেন কখনও কখনও এটি কাজ করে এবং কখনও কখনও ব্যর্থ হয় তা আমার কোনও ধারণা নেই। এটা খুব অদ্ভুত। আমি একটি ওয়ার্কআউন্ড ব্যবহার করে শেষ করেছি যেখানে আমি বর্তমান সময়টি পেয়েছি এবং এটি একটি ভেরিয়েবল হিসাবে সেট করেছি এবং তারপরে স্ক্রিপ্টটি বিরতি না দেওয়া পর্যন্ত সময় পরিবর্তনশীল প্লাস এক মিনিট (স্পষ্টত 1 মিনিটের বিলম্বের জন্য) হয় until এটি খাঁটি, তবে এটি কয়েক মাস ধরে নির্বিঘ্নে কাজ করেছে, যেখানে একটি সাধারণ বিলম্ব অন্তরঙ্গভাবে ছিল tent বিতৃষ্ণা।
2oh1

আমি ১০.১০.৫ চালাচ্ছি এবং এই সমাধানটি কাজ করে না এবং ঘুমের সময়কালের জন্য স্ক্রিপ্টটি লক করে রাখে
গ্রেগ

@ গ্রেগ: যদি এটি ঘুমের সময়কালের জন্য "স্ক্রিপ্টটি লক করে" থাকে, তবে এটি কাজ করছে। /bin/sleepঘুমের সময়কালের জন্য অপেক্ষা করে এবং এটি শেষ না হওয়া পর্যন্ত ফিরে আসে না। বিপরীতে, অ্যাপলস্ক্রিপ্টের অন্তর্নির্মিত delayকমান্ডটি স্ক্রিপ্টটি বিরতি দেওয়ার সময় ব্যবহারকারীর ইনপুট ইভেন্টগুলি পরিচালনা করে। : (যদি সেখানেঅনেক হলে ব্যবহারকারীর কীবোর্ড ইনপুট, কোনটি যেখানে বাগ মিথ্যা হয় delayচলতে স্ক্রিপ্ট সম্পাদন বিলম্ব সময়কাল সম্পন্ন করেছে সামনে।)
ক্রিস পৃষ্ঠা

3

আমি বলছি না এটিই সেরা সমাধান, তবে মনে হয় এটি আমার সমস্যার সমাধান করেছে। আমি বুঝতে না পারার কারণে সাধারণ বিলম্বটি ব্যবহার করার পরিবর্তে এটিকে অবহেলা করা হচ্ছে, নতুন সময় না আসা পর্যন্ত আমি সময় পেতে এবং লুপিংয়ে যেতে শুরু করেছি (এটি এখনও বিলম্ব ব্যবহার করে, তবে এটি উপেক্ষা করলে কিছুই যায় আসে না) স্ক্রিপ্ট যেহেতু সময় না পৌঁছানো অবধি চলবে না।

# Pause for five minutes
set GetTheTime to current date
set NewTime to GetTheTime + (5 * minutes)
repeat while (current date) is less than NewTime
    delay 60
end repeat

আমি এখনও বিলম্বকে কেন উপেক্ষা করা হচ্ছে তা জানার জন্য মরে যাচ্ছি (বা নাটকীয়ভাবে গণ্ডগোল হয়েছে?! ??), তবে এটি কাজটি হয়ে যায়, আনাড়ি হিসাবে।


"বিলম্ব" কমান্ডটি "স্পিড" করা হচ্ছে না, এটি বাধাগ্রস্থ হচ্ছে। বিলম্ব করার সময়, এটি কোনও লুপের মধ্যে বসে কোনও কিবোর্ড ইনপুট ইভেন্ট রয়েছে কিনা তা যাতে এটি কমান্ড-পিরিয়ডের জন্য পরীক্ষা করতে পারে checking স্পষ্টতই কোনও ব্যবহারকারী ইনপুট সনাক্ত হওয়ার পরে এটি ভুলভাবে বিলম্বের লুপটি থেকে বেরিয়ে আসছে।
ক্রিস পৃষ্ঠা

মজাদার! আমি আবিষ্কার করছি যে এটি উপেক্ষা করা হচ্ছে (গণ্ডগোল? বাধা?) এমনকি আমার ম্যাক যখন অলস অবস্থায় বসে আছেন, তবে কেন জানি না।
2oh1

একবার কোনও ব্যবহারকারী ইনপুট ইভেন্ট ইভেন্টের কাতারে উপস্থিত হওয়ার পরে, কোনও ইভেন্ট ইভেন্ট delayপরিচালনা না করে এবং সেগুলি সারি থেকে সরিয়ে না দেওয়া পর্যন্ত বাধা থাকবে।
ক্রিস পেজ

2

আমি একটি জার্মান ফোরামে পোস্টে একটি কাজ খুঁজে পেয়েছি । আপনার স্ক্রিপ্টের শীর্ষে এই লাইনগুলি যুক্ত করুন:

use framework "Foundation"
use scripting additions
current application's NSThread's sleepForTimeInterval:1

আপনার উত্তরটি পরীক্ষা করতে আমার সমস্যা হচ্ছে কারণ কারণ যাই হোক না কেন, দেরি বর্তমানে আমার ম্যাকের উপর প্রত্যাশা অনুযায়ী কাজ করছে। কেন আমি জানি না। আমি 10.10.3 চালাচ্ছি। সম্ভবত অ্যাপল এই বাগ ঠিক করেছেন? অথবা, এটি কেবলমাত্র একটি অন্তর্বর্তী সমস্যা যা এই মুহুর্তে আমার ম্যাককে প্রভাবিত করছে না। বিতৃষ্ণা। আমি যদিও উপরে বলেছি যে, আমার কার্যকারিতাটি আপেলস্ক্রিপ্টটি বর্তমান সময় পাবে এবং তারপরে বর্তমান সময়ের প্লাস এক্স পর্যন্ত বিলম্ব করবে।
2oh1

আমি পাশাপাশি 10.10.3 চালাচ্ছি এবং এখনও সমস্যাটি দেখতে পাচ্ছি। যেহেতু সকলেই সমস্যাটি দেখছেন না, এটি সম্ভবত বিরতিযুক্ত বা তৃতীয় পক্ষের সফ্টওয়্যার বা নির্দিষ্ট পছন্দসই সেটিংসের সাথে সম্পর্কিত। কে জানে. বিটিডাব্লু, আপনার কাজের আশেপাশে সম্ভবত অসুবিধা রয়েছে যে অ্যাপটি অপেক্ষা করার সময় ১০০% সিপিইউ সময় ব্যবহার করে, যেখানে সঠিক বিলম্ব আচরণ হ'ল অ্যাপটিকে সেই সময়ের জন্য ঘুমিয়ে রাখা, যার ফলে কম শক্তি ব্যবহার করা হয়।
থমাস টেম্পেলম্যান

আমি 10.10.5 চালাচ্ছি এবং এই সমাধানটি কার্যকর হয় না।
গ্রেগ

@ থমাসটেম্পেলম্যান: ব্যবহারকারী যখন ইনপুট থাকে তখন সমস্যাটি দেখা দেয়। স্ক্রিপ্ট চলাকালীন আপনি যদি ক্লিক বা টাইপ না করেন তবে বাগটি ট্রিগার করা হয়নি।
ক্রিস পৃষ্ঠা

নোট করুন যে এই দ্রবণটির ফলে অ্যাপ্লিকেশনটি ঘুমের সময়কালের জন্য আসলে স্থির হয়ে যায়। delayস্ক্রিপ্ট বিরতি থাকা অবস্থায় ব্যবহারকারীর ইনপুট প্রক্রিয়াকরণ করে, আপনি উদাহরণস্বরূপ এখনও মেনু এবং উইন্ডোগুলির সাথে ইন্টারেক্ট করতে পারেন।
ক্রিস পৃষ্ঠা

0

carzyj আমি সেরা উত্তর বিবেচনা কি ছিল, কিন্তু ক্রিস পৃষ্ঠার পদ্ধতির সাথে একত্রিত হলে, আপনি পাবেন:

on delay duration
  do shell script "/bin/sleep " & duration
end delay

মূল বিলম্বে ফিরে যেতে আপনি "শেষ বিলম্ব" এর মাধ্যমে "বিলম্বের উপর" মন্তব্য করতে পারেন।


আমি এটি দেখার আগেও অনুরূপ কোড পরিবর্তন করেছি। আমি 10.10.5 চালাচ্ছি এবং এই সমাধানটি কাজ করে না এবং ঘুমের সময়কালের জন্য স্ক্রিপ্টটি লক করে দেয়।
গ্রেগ

0

এটি @ ক্রিস-পৃষ্ঠার সমাধানে একটি পরিবর্তন

এটি প্রতিক্রিয়াশীলতা এবং সঠিকভাবে বিলম্ব ক্যাপচারের মধ্যে একটি ভারসাম্য বলে মনে হচ্ছে।

on delay duration
    set endTime to (current date) + duration
    repeat while (current date) is less than endTime
        set delta to duration / 100
        if duration < 0.2 then
            set delta to 0.2
        end if
        tell AppleScript to delay delta
    end repeat
end delay

তবে সামগ্রিক সময়ের জন্য অ্যাপলস্ক্রিপ্টটি বিলম্ব করার পরিবর্তে, আমরা কেবলমাত্র সময়কালটির একটি ভগ্নাংশের জন্য বিলম্ব করতে বলি। যদি সময়কাল অ্যাপল অনুমতি দেয় তার চেয়ে কম হয় (এক সেকেন্ডের ১/60০), তবে আসুন কেবল এটিকে ব-দ্বীপে সেট করুন। যে আমরা কিছু প্রতিক্রিয়া রাখতে পারি, তবুও সঠিক হতে পারি। সন্দেহ এই যে কখনও কখনও বিলম্ব কাজ করে না তাই পুনরাবৃত্তি যখন লুপটি থ্রেডটিকে আটকে রাখবে তবে সাফল্যের পরিস্থিতিতে আমরা বিলম্বের ব-দ্বীপটি সংক্ষিপ্ত করে রাখতে চাই যাতে প্রক্রিয়াটি এখনও বাধাগ্রস্ত হয় we


অনুরোধ করা দেরি হ্রাস করা অপ্রয়োজনীয় এবং কেবলমাত্র স্ক্রিপ্টটি ধীর করতে পারে এবং অপেক্ষা করার সময় আরও সিপিইউ গ্রাস করতে পারে। আমার সংস্করণটি সম্পূর্ণ পছন্দসই সময়কাল ব্যয় না হওয়া অবধি কেবল বিলম্বকে কল করে, delayকার্যকর হওয়া চালিয়ে যাওয়ার আগে যতটা সম্ভব বিলম্ব করতে দেয় ।
ক্রিস পৃষ্ঠা

নোট করুন যেহেতু এই উত্তরটি পোস্ট করা হয়েছিল, তাই আমি আমার কোডটি delay endTime - (current date)পরিবর্তে ব্যবহারের জন্য আপডেট করেছি delay duration, যা নিশ্চিত করে যে যদি বাধা delay না পাওয়া যায় তবে এটি মূল অনুরোধকৃত সময়ের চেয়ে স্ক্রিপ্টটিকে আর থামিয়ে দেবে না, যা আপনি চেষ্টা করছেন যা হতে পারে এই উত্তর সহ ঠিকানা।
ক্রিস পেজ

0

সুতরাং, সব একসাথে রাখার জন্য, আমি বিশ্বাস করি ক্রিস এর অর্থ:

on delay duration
   set endTime to (current date) + duration
   repeat while (current date) is less than endTime
      tell AppleScript to delay endTime - (current date)
   end repeat
end delay
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.