os.systemを繰り返し呼び出す無限のwhileループを停止します

ノ・ヨングー

私の投稿を見てくれてありがとう。

まず、私のコードは次のとおりです。

import os

print("You can create your own message for alarm.")
user_message = input(">> ")

print("\n<< Sample alarm sound >>")

for time in range(0, 3):
    os.system('say ' + user_message) # this code makes sound.

print("\nOkay, The alarm has been set.")

"""
##### My problem is here #####
##### THIS IS NOT STOPPED #####

while True:
    try:
        os.system('say ' + user_message)
    except KeyboardInterrupt:
        print("Alarm stopped")
        exit(0)
"""

私の問題は、Ctrl + Cが機能しないことです!

tryブロックの位置を変えて、シグナル(SIGINT)キャッチ機能を作ってみました。

しかし、それらも機能しません。

私が見てきたhttps://stackoverflow.com/a/8335212/5247212https://stackoverflow.com/a/32923070/5247212、この問題について他のいくつかの答え。

MAC OS(10.12.3)とPython3.5.2を使用しています。

ファルシル

これはos.system()、C関数の薄いラッパーと同様に、予想される動作system()です。マニュアルページに記載されているように、親プロセスコマンドの実行中にSIGINTを無視します。ループを終了するには、子プロセスの終了コードを手動で確認する必要があります(これはmanページにも記載されています)。

import os
import signal

while True:
    code = os.system('sleep 1000')
    if code == signal.SIGINT:
        print('Awakened')
        break

ただし、同じ結果を達成するための推奨される(そしてよりPythonicな)方法は、subprocessモジュールを使用することです。

import subprocess

while True:
    try:
        subprocess.run(('sleep', '1000'))
    except KeyboardInterrupt:
        print('Awakened')
        break

コードは次のようになります。

import subprocess

print("You can create your own message for alarm.")
user_message = input(">> ")

print("\n<< Sample alarm sound >>")

for time in range(0, 3):
    subprocess.run(['say', user_message]) # this code makes sound.

print("\nOkay, The alarm has been set.")

while True:
    try:
        subprocess.run(['say', user_message])
    except KeyBoardInterrupt:
        print("Alarm terminated")
        exit(0)

追記として、subprocess.run()Python3.5以降でのみ使用できます。を使用subprocess.call() して、古いバージョンのPythonで同じ効果を実現できます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python:os.systemによるプロセス呼び出しの数を制限する

分類Dev

os.system()呼び出しをエスケープする方法は?

分類Dev

os.systemを使用してPowerShellを呼び出すときにエラーが発生しました

分類Dev

Goのosパッケージ呼び出しを特定のユーザーで実行するデフォルトの方法はありますか

分類Dev

Python3.6のos.system呼び出しで引数を渡す

分類Dev

do whileループで繰り返し関数を呼び出す

分類Dev

mac-os-x Yosemiteで「npm」を呼び出すと、Jenkinsビルドステップが失敗します

分類Dev

whileループとafterを使用して関数を繰り返し呼び出すことの違い

分類Dev

ループ内のos.fork()でさまざまな関数を呼び出す方法は?

分類Dev

Mac OS Xアプリをコード署名すると、API呼び出しが実行されません

分類Dev

go os.exec呼び出しをchroot / sandboxする方法はありますか(rm -rf /を防止)

分類Dev

最後にos.Lstatを呼び出してからファイルが変更された場合にのみos.Lstatを呼び出す

分類Dev

OS Xのフォトライブラリを繰り返し処理しますか?

分類Dev

関数os.popen()を呼び出すと、予期しない戻りオブジェクトが返されます

分類Dev

OS X / Linuxのワンライナー/スクリプトで、テキストファイル内の最大の繰り返し行グループを検索しますか?

分類Dev

Primefaces-ツリーコンポーネント-再帰的なツリー構築アルゴリズムを繰り返し呼び出す無限ループ

分類Dev

OSプロセスまたはREST経由のマイクロサービスとしてJavaからPython機械学習サービスを呼び出す

分類Dev

デュアルブートは他のOSを一時停止してスリープ解除します

分類Dev

whileループから関数を呼び出すと、無限ループが発生します

分類Dev

呼び出し後にOSエラーを取得する慣用的な方法

分類Dev

Java:Runtime.getRuntime()。exec()を介してOS依存の呼び出しの文字列をエスケープする正しい方法

分類Dev

RESTfulAPIを繰り返し呼び出す

分類Dev

ffmpegを繰り返し呼び出す

分類Dev

win32comとosを使用してExcelファイルタイプを繰り返し変更するにはどうすればよいですか?

分類Dev

繰り返しの関数呼び出しで古い呼び出しを停止する方法

分類Dev

Mac OSはdrawRect:などの表示メソッドを異なるスレッドから同時に呼び出しますか?データモデルにアクセスするとき、それは危険ではありませんか?

分類Dev

forループ繰り返しテーブルを停止します

分類Dev

os.removeAllを呼び出す前にos.Fileを閉じる必要がありますか?

分類Dev

os.chmodを使用して特定の権限を削除します

Related 関連記事

  1. 1

    Python:os.systemによるプロセス呼び出しの数を制限する

  2. 2

    os.system()呼び出しをエスケープする方法は?

  3. 3

    os.systemを使用してPowerShellを呼び出すときにエラーが発生しました

  4. 4

    Goのosパッケージ呼び出しを特定のユーザーで実行するデフォルトの方法はありますか

  5. 5

    Python3.6のos.system呼び出しで引数を渡す

  6. 6

    do whileループで繰り返し関数を呼び出す

  7. 7

    mac-os-x Yosemiteで「npm」を呼び出すと、Jenkinsビルドステップが失敗します

  8. 8

    whileループとafterを使用して関数を繰り返し呼び出すことの違い

  9. 9

    ループ内のos.fork()でさまざまな関数を呼び出す方法は?

  10. 10

    Mac OS Xアプリをコード署名すると、API呼び出しが実行されません

  11. 11

    go os.exec呼び出しをchroot / sandboxする方法はありますか(rm -rf /を防止)

  12. 12

    最後にos.Lstatを呼び出してからファイルが変更された場合にのみos.Lstatを呼び出す

  13. 13

    OS Xのフォトライブラリを繰り返し処理しますか?

  14. 14

    関数os.popen()を呼び出すと、予期しない戻りオブジェクトが返されます

  15. 15

    OS X / Linuxのワンライナー/スクリプトで、テキストファイル内の最大の繰り返し行グループを検索しますか?

  16. 16

    Primefaces-ツリーコンポーネント-再帰的なツリー構築アルゴリズムを繰り返し呼び出す無限ループ

  17. 17

    OSプロセスまたはREST経由のマイクロサービスとしてJavaからPython機械学習サービスを呼び出す

  18. 18

    デュアルブートは他のOSを一時停止してスリープ解除します

  19. 19

    whileループから関数を呼び出すと、無限ループが発生します

  20. 20

    呼び出し後にOSエラーを取得する慣用的な方法

  21. 21

    Java:Runtime.getRuntime()。exec()を介してOS依存の呼び出しの文字列をエスケープする正しい方法

  22. 22

    RESTfulAPIを繰り返し呼び出す

  23. 23

    ffmpegを繰り返し呼び出す

  24. 24

    win32comとosを使用してExcelファイルタイプを繰り返し変更するにはどうすればよいですか?

  25. 25

    繰り返しの関数呼び出しで古い呼び出しを停止する方法

  26. 26

    Mac OSはdrawRect:などの表示メソッドを異なるスレッドから同時に呼び出しますか?データモデルにアクセスするとき、それは危険ではありませんか?

  27. 27

    forループ繰り返しテーブルを停止します

  28. 28

    os.removeAllを呼び出す前にos.Fileを閉じる必要がありますか?

  29. 29

    os.chmodを使用して特定の権限を削除します

ホットタグ

アーカイブ